SQL Server-了解最小(文本)的工作方式
-
12-10-2019 - |
题
我正在做一些挖掘,并寻找有关SQL Server如何评估的解释 MIN(Varchar)
.
我在bol:min中发现了这一点
因此,如果我有一个具有以下值一行的表:
Data
AA
AB
AC
做一个 SELECT MIN(DATA)
会返回AA。我只想理解为什么背后的原因,并更好地理解BOL。
谢谢!
解决方案
它由 整理 (排序)。对于大多数文化,整理顺序与英语字母中的字母顺序相同:
- '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');
其他提示
不,最小在扫描多个行的选择语句中使用。它将列作为参数,并返回该列中发现的“最低”值(再次根据整理序列)。
结果集无需划分,结果集将具有一行,最小值的值将是该列中最低的值。与小组按子句一起使用,结果集将对每个组有一个行,而最小值的值将是该组中任何行的最低值。
min(x),其中是一个char(string)类型-CHAR(),VARCHAR(),NCHAR(),NVARCHAR(),根据SQL的字符串比较规则找到了组中最低的值:
- 如果两个字符串的长度有所不同,则将较短的SP字符(空间)填充到较长的长度。
- 根据使用中的整理顺序规则,比较从左到右进行。
- 在比较中,值null比较低于任何非null值(ISO/ANSI SQL标准表明,对于NULL的汇编是低于任何非null值)是实现选择。
所以,如果您有桌子
create table foo
(
myString varchar(16) not null ,
)
然后运行查询
select min(myString) from foo
将为您提供相同的结果集,就像执行
set rowcount 1
select myString
from foo
order by myString
set rowcount 0
您基本上是按升序序列订购集合并选择第一个值。 Max()或课程为您提供逆,以降序序列订购集合并选择第一个值。
不隶属于 StackOverflow