有什么理由说min和max不能处理位字段

Rom*_*kar 13 sql sql-server

可能我错过了一些东西,但对我来说看起来仍然很奇怪为什么不可能在比特字段上使用maxmin聚合.所以,如果我尝试做这样的事情:

declare @temp table (data bit)

insert into @temp
select 1 union all
select 0

select max(data) from @temp
Run Code Online (Sandbox Code Playgroud)

我会得到一个错误Operand data type bit is invalid for max operator.但是如果我做这样的事情:

declare @temp table (data bit)

insert into @temp
select 1 union all
select 0

select top 1 * from @temp order by data desc
Run Code Online (Sandbox Code Playgroud)

它工作正常,因此SQL Server 确实知道如何对位字段进行排序.但订购数据的可能性意味着我们可以获得最大值或最小值.这种限制背后的原因是什么?

Rhy*_*nes 4

除非我们能够从 SQL Server 团队获得一些内部信息,否则我们可能不得不接受有时答案只是“因为”。不过,文档非常清楚,例如MIN状态的 MSDN 页面;

MIN 可与 numeric、char、varchar、uniqueidentifier 或 datetime 列一起使用,但不能与位列一起使用。

我的猜测(是的,我准备好因为在如此答案中冒险猜测而受到批评!)是好处不会超过更改代码的风险。到底有什么好处呢?

您不是第一个提出这个问题的人,但对BIT 列上的聚合函数的响应: MS Connect 上的 MIN 和 MAX 表明它不太可能改变。

  • “具体有什么好处?” 更干净的代码。返回正确数据类型的列,无需双重 CAST。 (9认同)