SQL SERVER - 了解MIN(文本)的工作原理

tme*_*cer 19 t-sql sql-server sqltransaction

我正在进行一些挖掘并寻找有关SQL Server如何评估的解释MIN(Varchar).

我在BOL中找到了这句话:MIN在底层数据库中定义的整理顺序中找到最低值

因此,如果我有一个包含以下值的行的表:

Data

AA
AB
AC
Run Code Online (Sandbox Code Playgroud)

做一个SELECT MIN(DATA)会返回AA.我只是想了解这背后的原因并更好地理解BOL.

谢谢!

Mar*_*ers 19

它由排序规则(排序顺序)决定.对于大多数文化,整理顺序与英文字母中的字母顺序相同,因此:

  • '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');


Lar*_*tig 5

不,MIN用于扫描多行的SELECT语句.它将一列作为参数,并返回该列中的"最低"值(同样,根据归类序列).

如果没有GROUP BY子句,结果集将只有一行,MIN的值将是该列中找到的最低值.与GROUP BY子句一起使用时,结果集将为每个组分配一行,MIN的值将是该组中任何行的该列中的最小值.