sql server字符串比较

时间:2015-03-20 01:52:54

标签: sql sql-server

我知道现在已经很晚了,但这里发生了什么?我希望没有结果,因为分号在9之后出现在ASCII中:

select ascii(';') as semicolon, ascii('9') as nine where  ';' < '9' 

结果:

semicolon   nine
59          57

2 个答案:

答案 0 :(得分:6)

SQL Server中字符数据的排序和比较仅由二进制排序规则的代码点决定。

select ascii(';') as semicolon, ascii('9') as nine where  ';' COLLATE Latin1_General_BIN < '9' COLLATE Latin1_General_BIN;

对于其他归类,比较规则和排序顺序是字典顺序(alphas之前的特殊字符),而不管底层二进制代码点序列如何。此外,Windows排序规则也遵循语言排序&#34;单词排序&​​#34;规则。例如:

SELECT 1 WHERE 'coop' COLLATE SQL_Latin1_General_CP1_CI_AS < 'co-op' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT 1 WHERE 'coop' COLLATE Latin1_General_CI_AS < 'co-op' COLLATE Latin1_General_CI_AS; 

答案 1 :(得分:2)

在ISO字符串上使用<运算符时,使用字典顺序(即您在字典中找到的顺序)进行比较。

http://en.wikipedia.org/wiki/Lexicographical_order

您需要使用ASCII()子句中的WHERE函数才能使您的案例成立。

SELECT ASCII(';') AS semicolon,
       ASCII('9') AS nine
WHERE ASCII(';') < ASCII('9')

http://sqlfiddle.com/#!6/9eecb/1264