Max(String)返回什么值

时间:2014-07-04 11:10:32

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

我对MS-SQL Server有疑问。

Select   Name, max(Class),min(Rank)
from     table t with (nolock)
group by Name

上述查询是否会返回包含max(Ascii(Class))

的值
Select   Name,max(Ascii(Class)),min(Rank) 
from     table t with (nolock)
group by Name

或以下列方式

Select   Name,max(cast(Class as varbinary)),min(Rank) 
from     table t with (nolock)
group by Name

这是SQL Server如何处理它们并返回值...任何人都可以告诉我SQL Server处理的正确方法

3 个答案:

答案 0 :(得分:1)

取决于collation 1 。服务器具有默认排序规则,数据库具有默认排序规则,字符串列具有排序规则,您可以在特定查询期间覆盖排序规则。

所以,

declare @t table (
    Col varchar(50) not null
)
insert into @t(Col) values ('s'),('t'),('ß')

select
    MAX(col collate Latin1_General_CS_AS),
    MAX(col collate Latin1_General_100_BIN)
from @t

返回:

-------- --------
t        ß

没有COLLATE强制转换的结果,取决于Class列的排序规则。在创建该列时,将显式设置,或者通过继承创建时的数据库默认值来设置。


1 基本上,归类让告诉SQL Server应该为您的特定数据使用哪种排序顺序和比较规则,因此MAX只是应用已经选择的规则。

答案 1 :(得分:0)

SELECT MAX(Class)将返回以desc顺序排在第一位的字符串..

意味着你有ttt,tuv,tav意味着结果将是tuv

但是SELECT MAX(Ascii(Class))返回字符串dude ....中第一个字符的第一个ascii值。

在SELECT max(cast(Class as varbinary))也像SELECT MAX(Class)查询一样工作......

答案 2 :(得分:-1)

Select   Name, max(Class),min(Rank)
from     table t with (nolock)
group by Name

这将返回Alphabetically top 1 from descending order

Select   Name,max(Ascii(Class)),min(Rank) 
from     table t with (nolock)
group by Name

这一行从所有行中取first letter's ASCII value并返回MAX值。对于例如类是"结束",' E'的ASCII值。是' 69'。