SQL排序规则 - 字符串比较的行为不符合可打印字符的预期

时间:2015-04-07 23:01:13

标签: sql sql-server sql-server-2008

我明白了:

  • ascii()值和'9'的unicode()值为57
  • ascii()值和':'的unicode()值为58

因此,我希望以下测试能够产生'这是有道理的!'

IF '9' < ':'  select 'This makes sense!' as OUTCOME
ELSE select 'Makes no sense to me!' as OUTCOME

唉,事实并非如此。

现在Ascii标尺的进一步向上是字母A(ascii-65)到Z(ascii-90)等。如果我运行以下逻辑测试:

   IF '9' < 'A'  select 'This makes sense!' as OUTCOME
   ELSE select 'Makes no sense to me!' as OUTCOME

然后恢复理智。

显然必须有一些SQL设置来控制这种行为,但是在花了一些时间在互联网上搜索这种行为的解释后,我还没有找到任何。

1 个答案:

答案 0 :(得分:1)

你已经得到了你没有利用它的答案。

IF ASCII('9') < ASCII(';')

如果没有它,你只是比较字符串,顺序是由数据库的整理决定的,当然不是ASCII,而是在大多数情况下字典的排序方式更多。

此链接显示基于排序规则https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx

的不同排序机制

如果你坚持按照ASCII排序,那么上面的代码就可以了。