SQL Server如何比较两个NCHAR(1)类型?

时间:2016-12-08 19:35:07

标签: sql sql-server string unicode sqldatatypes

我正在使用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), '哎');

执行时我得到了:

enter image description here

当我更改运算符时>到&lt;在IF语句中再次执行,我得到了:

enter image description here

结果对我来说似乎有点混乱。有人可以帮忙解释一下吗?

BTW,我在SQL Server 2016 SP1上。

1 个答案:

答案 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的范围!”并返回一个文字问号。