我正在 Oracle 中运行一个查询,该查询按可能包含带有“&”号的值的列排序。然而,排序算法似乎忽略了&符号。
例如:
select * from (
select '&' txt from dual
union
select 'P' txt from dual
union
select 'N' txt from dual
)
order by txt
准确打印(我猜是正确的):
&
N
P
但是,如果我将带有“&”的文本更改为“&Z”,结果会发生变化:
select * from (
select '&'||'Z' txt from dual // concatenating just to
// avoid variable substitution
union
select 'P' txt from dual
union
select 'N' txt from dual
)
order by txt
那么结果是:
N
P
&Z
如果我将“Z”更改为“A”,那么结果是:
&A
N
P
ORDER BY 子句似乎没有考虑“&”。有谁知道这是否是预期行为或者我是否缺少某些配置步骤?我知道需要转义&符号以进行插入或更新。但问题是该角色已经在表中了!
预先感谢各位。
这是语言排序的效果:
SQL> alter session set nls_sort=binary;
Session altered.
SQL> get afiedt.buf
1 select * from (
2 select '&' txt from dual
3 union
4 select '&'||'Z' txt from dual
5 union
6 select '&'||'A' txt from dual
7 union
8 select 'P' txt from dual
9 union
10 select 'N' txt from dual
11 )
12* order by txt
SQL> /
TX
--
&
&A
&Z
N
P
SQL> alter session set nls_sort = 'Dutch';
Session altered.
SQL> get afiedt.buf
1 select * from (
2 select '&' txt from dual
3 union
4 select '&'||'Z' txt from dual
5 union
6 select '&'||'A' txt from dual
7 union
8 select 'P' txt from dual
9 union
10 select 'N' txt from dual
11 )
12* order by txt
SQL> /
TX
--
&
&A
N
P
&Z
它确实对您要排序的语言有所不同。有些字符根据其语言而具有不同的值。对于二进制,您可以使用 ascii 值进行排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)