我正在做一点挖掘,并寻找关于sql Server如何评估MIN(Varchar)的解释.
我在BOL中发现这个说法:MIN找到底层数据库中定义的整理顺序中的最低值
所以如果我有一个表具有以下值的一行:
Data AA AB AC
执行SELECT MIN(DATA)将返回AA.我只是想了解为什么背后,了解BOL一点点更好.
谢谢!
解决方法
它由
collation(排序顺序)决定.对于大多数文化,整理顺序与英文字母表中的字母顺序相同,所以:
>’AA’ ‘AB’
>’AA’ ‘AC’
>’AB’< 'AC'
因此,“AA”是最小值.对于其他文化,这可能不成立.例如,丹麦排序规则将“AB”作为最小值,因为“AA”> ‘AB’.这是因为“AA”被视为等同于“Å”,这是丹麦字母表中的最后一个字母.
SELECT MIN(s COLLATE Danish_Norwegian_CI_AS) FROM table1; min_s AB
要获得“普通”排序顺序,请使用Latin1_General_Bin排序规则:
SELECT MIN(s COLLATE Latin1_General_Bin) FROM table1; min_s AA
要重现此结果,您可以创建此测试表:
CREATE TABLE table1 (s varchar(100)); INSERT INTO table1 (s) VALUES ('AA'),('AB'),('AC');