sql server字符串比较

sql server字符串比较,sql,sql-server,Sql,Sql Server,我知道很晚了,但这里发生了什么?我希望没有结果,因为在ASCII中分号位于9之后: select ascii(';') as semicolon, ascii('9') as nine where ';' < '9' 在SQL Server中使用时,字符数据的排序和比较仅由具有二进制排序规则的代码点确定 select ascii(';') as semicolon, ascii('9') as nine where ';' COLLATE Latin1_General_BIN &l

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

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

在SQL Server中使用
时,字符数据的排序和比较仅由具有二进制排序规则的代码点确定

select ascii(';') as semicolon, ascii('9') as nine where  ';' COLLATE Latin1_General_BIN < '9' COLLATE Latin1_General_BIN;
选择ascii(“;”)作为分号,选择ascii('9')作为9,其中“;”校对拉丁语1_General_BIN<'9'校对拉丁语1_General_BIN;
对于其他排序规则,比较规则和排序顺序是字典顺序(字母前的特殊字符),而不考虑底层二进制代码点序列。此外,Windows排序规则还遵循语言“单词排序”规则。例如:

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,其中“合作社”将SQL拉丁语1\u通用语1\u通用语1\u CI拉丁语作为“合作社”将SQL拉丁语1\u通用语1\u通用语1\u CI拉丁语作为“合作社”进行比较;
选择1,其中“合作社”校对拉丁语1\u General\u CI\u AS<“合作社”校对拉丁语1\u General\u CI\u AS;

ascii()只是表示分号实际上大于9。我只是想知道为什么“;”9'的计算结果为真。是的,但是为什么字符串比较会产生不同的结果?当使用
谢谢Dan时,我知道这会是一个类似这样的深奥的东西。如果你问我的话,那真是令人困惑@琼汉伦,是的,这让人困惑。幸好您没有询问语言和代码页:-)
select ascii(';') as semicolon, ascii('9') as nine where  ';' COLLATE Latin1_General_BIN < '9' COLLATE Latin1_General_BIN;
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;