kam*_*mil 2 oracle sql-order-by oracle11g
我有通过varchar排序元素的问题,包含波兰字符,如±,Ą.
例如,我们有以下名称:
Aaaa
BBcvx
?ccc
Ddde
?dcc
Run Code Online (Sandbox Code Playgroud)
以下查询:
select * from something order by lower(name);
Run Code Online (Sandbox Code Playgroud)
返回结果如下:
Aaaa
BBcvx
Ddde
?dcc
?ccc
Run Code Online (Sandbox Code Playgroud)
如您所见,抛光字符被忽略并放在最后.它应该是:
Aaaa
?dcc
?ccc
BBcvx
Ddde
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?数据库编码?我的是:
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
Result:
EE8MSWIN1250
Run Code Online (Sandbox Code Playgroud)
可以在不更改数据库编码的情
您需要查看NLS_SORT参数,特别是语言排序.您可以使用此参数指定要排序的语言.我怀疑你的情况会是这样的POLISH.
像这样的东西
select *
from something
order by nls_lower(name, 'NLS_SORT' = 'POLISH')
Run Code Online (Sandbox Code Playgroud)
NLS_LOWER()以与普通方式相同的方式返回小写字符LOWER().
您也可以在会话级别执行此操作,这将更改会话持续时间的默认排序参数.
alter session set nls_sort = POLISH;
Run Code Online (Sandbox Code Playgroud)
如果你想总是使用这种类型; 这是在创建数据库时完成的数据库级别.
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |