为什么我不能在SQL case语句中使用位字段作为布尔表达式?

fro*_*die 11 sql boolean case bit

我想根据位字段是真还是假来有条件地选择一些东西.这是我最初尝试的语法:

CASE WHEN isSoon THEN 'Soon' ELSE 'Not so soon' END As HowSoon
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,因为"WHEN"后面必须是一个布尔表达式isSoon,因为它是一个小字段.但是,这不起作用.我最终要做的是:

CASE WHEN isSoon = 1 THEN 'Soon' ELSE 'Not so soon' END As HowSoon
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是多余的......这就像if(isSoon == True)用编程语言编写而不是更直观,if(isSoon)而且反对谷物.为什么SQL设置如此?是因为位字段不是真正的布尔值吗?

il_*_*uru 13

由于位数据类型不是布尔类型,因此它是用于优化位存储的数据类型.

字符串"true"和"false"可以转换为位的事实可能会产生误导,但是,引用MSDN,有点是"可以取值为1,0或NULL的整数数据类型".

  • 这似乎没有回答为什么.是的它是1,0或null.但这只是一个可以为空的布尔值(假设列允许空值).为什么SQL人员决定将其视为`supersmallint`而不是它所代表的bool,并且在99.9999%的时间内被用作. (4认同)
  • @Vaccano:实际上是答案.具有3种可能状态的数据类型(可空的bool - SQL情况下的位)与具有2种可能状态的数据类型(bool)非常不同 (2认同)