【问题标题】:Why can't I use a bit field as a boolean expression in a SQL case statement?为什么我不能在 SQL 案例语句中使用位字段作为布尔表达式?
【发布时间】:2010-12-02 13:00:25
【问题描述】:

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

CASE WHEN isSoon THEN 'Soon' ELSE 'Not so soon' END As HowSoon

这对我来说很有意义,因为“WHEN”后面的内容必须是一个布尔表达式,isSoon 是,因为它是一个位字段。然而,这并没有奏效。最后我要做的是:

CASE WHEN isSoon = 1 THEN 'Soon' ELSE 'Not so soon' END As HowSoon

这对我来说似乎是多余的......这就像用编程语言编写 if(isSoon == True) 而不是更直观的 if(isSoon) 并且违背了规律。为什么 SQL 是这样设置的?是不是因为位域不是真正的布尔值?

【问题讨论】:

  • 您能说一下您使用的是什么数据库提供商吗? MySQL 似乎对此没有问题。
  • 这也困扰着我,但 sql 不是那样设置的。就像在将参数传递给 SP 时不能使用计算一样(例如,你不能这样做 exec ListPermissionsByUser @DomainName + '\' + @UserName

标签: sql boolean case bit


【解决方案1】:

由于位数据类型不是布尔类型,它是一种用于优化位存储的数据类型。

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

【讨论】:

  • 这似乎无法回答它的原因。是的,它是 1、0 或 null。但这只是一个可为空的布尔值(假设该列允许空值)。为什么 SQL 人员决定将其视为 supersmallint 而不是它所代表的布尔值,并且 99.9999% 的时间都使用它。
  • @Vaccano:其实是答案。具有 3 种可能状态的数据类型(可空 bool - SQL 案例中的位)与具有 2 种可能状态的数据类型(布尔)非常不同
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 2020-12-19
相关资源
最近更新 更多