我正在使用SQL Server的数据类型进行一些测试。我有以下代码:
IF CONVERT(NCHAR(1), '啊') > CONVERT(NCHAR(1), '哎')
SELECT '>';
ELSE
SELECT '<';
SELECT '<' WHERE CONVERT(NCHAR(1), '啊') < CONVERT(NCHAR(1), '哎');
SELECT '>' WHERE CONVERT(NCHAR(1), '啊') > CONVERT(NCHAR(1), '哎');
执行时我得到了:
当我更改运算符时>到&lt;在IF
语句中再次执行,我得到了:
结果对我来说似乎有点混乱。有人可以帮忙解释一下吗?
BTW,我在SQL Server 2016 SP1上。
答案 0 :(得分:3)
在您编写的代码中,您遗漏了一种可能性:两个值相等。事实证明,这就是正在发生的事情。这是一个小代码:
SELECT '=' WHERE CONVERT(NCHAR(1), '啊') = CONVERT(NCHAR(1), '哎');
SELECT UNICODE(CONVERT(NCHAR(1), '啊')),
UNICODE(CONVERT(NCHAR(1), '哎')),
NCHAR(UNICODE(CONVERT(NCHAR(1), '哎')));
第一个选择显示两个值确实比较相等,第二个选择显示原因。具体来说,如果没有字符串文字的N
前缀,则将它们视为ASCII的SQL会说“那些超出ASCII的范围!”并返回一个文字问号。