【发布时间】:2019-12-27 15:19:35
【问题描述】:
我有一个带有 varchar2 列的表。按该列排序并没有给我预期的结果:
with test (col) as
(select '_83_' from dual union all
select '_81_' from dual union all
select '4___' from dual union all
select '____' from dual
)
select * from test
order by col desc;
返回:
Col
1. '_83_'
2. '_81_'
3. '4___'
4. '____'
我确实期待:
Col
1. '4___'
2. '_83_'
3. '_81_'
4. '____'
您能否解释一下并帮助我将'4___' 放在我的订单声明的开头?
使用 Littlefoots 语句编辑可预生产性...
编辑我使用的是 Oracle 12c
编辑 NLS_Sort 设置为德语。这就是问题所在。
【问题讨论】:
-
你能把样本数据和预期的输出也放上吗,这很难用更少的信息提出任何建议。
-
可以设置NLS_SORT为二进制或者使用
order by nlssort(column1, 'NLS_SORT = BINARY') desc,但是不知道为什么Oracle默认忽略下划线。 -
NLS_SORT 设置的当前值是多少?
-
@PonderStibbons 因为如果排序设置是语言设置,oracle 会忽略下划线。基于 ASCII 表的排序或 BINARY 为语言 NLS_SORT 定义下划线的不同排序规则
-
@PonderStibbons 这样的,你的意思是? docs.oracle.com/cd/B19306_01/server.102/b14225/ch5lingsort.htm
标签: sql oracle sql-order-by