sql - 带有'_'的 Varchar2 的 Oracle SQL 订单
问题描述
我有一个带有 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
设置为BINARY
所以不可重现。
WITH TEMO AS
(
SELECT '_83_' AS X FROM DUAL UNION ALL
SELECT '_81_' AS X FROM DUAL UNION ALL
SELECT '4___' AS X FROM DUAL UNION ALL
SELECT '____' AS X FROM DUAL
)
SELECT * FROM TEMO ORDER BY X DESC;
X
----
____
_83_
_81_
4___
但是,从 更改NLS_SORT
为BINARY
后GERMAN
,该问题被重现。
ALTER SESSION SET NLS_SORT=GERMAN;
WITH TEMO AS
(
SELECT '_83_' AS X FROM DUAL UNION ALL
SELECT '_81_' AS X FROM DUAL UNION ALL
SELECT '4___' AS X FROM DUAL UNION ALL
SELECT '____' AS X FROM DUAL
)
SELECT * FROM TEMO ORDER BY X DESC;
X
----
_83_
_81_
4___
____
您可以使用下表检查 NLS 值:
NLS_SESSION_PARAMETERS
NLS_DATABASE_PARAMETERS
所以结论是NLS_SORT
必须相应地设置参数,因为不是每个人都想使用技术进行排序。
的默认值NLS_SORT
源自NLS_LANGUAGE
。
有关 NLS_SORT 的更多信息,请参阅oracle 文档。
NLS_SORT
解决方案是根据需要进行更改。
干杯!!
推荐阅读
- python - 使用 Python 在 S3 中将 CSV 转换为 Parquet
- angular - 将 URL 值从父级传递给子级
- reactjs - React + fetch:在我的网址中添加额外的字符和反斜杠
- android - Xamarin 生成问题说明 Zza 类型是在未引用的程序集中定义的。找不到 Xamarin.GooglePlayServices.Basement
- google-apps-script - 此代码应该将数据从我的电子表格转换为文档,然后转换为 pdf,但它只执行最后一行
- arrays - 谷歌表格根据按变量排序的不同变量对两列求和
- php - 创建没有双值的多维数组
- python - DataFrame 返回不正确的值 Pandas
- bcrypt - 安装 passlib [bcrypt] 时无法安装 6-1.16.0
- python - 带有 URL 的 aiohttp unittest 不是 GET