2010-12-02 19 views
10

我想根据位域是true还是false来有条件地选择一些东西。这是我最初试图语法:为什么我不能在SQL case语句中使用位域作为布尔表达式?

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

这对我来说很有意义,因为接下来的“当”必须是一个布尔表达式,这isSoon是,因为它是一个位字段。但是,这并没有奏效。我不得不到底做的是:

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

这似乎是多余的,我...这就像一种编程语言,而不是更直观if(isSoon)if(isSoon == True),并违背了粮食。为什么SQL是这样设置的?是因为位域不是真正的布尔值?

+1

你还可以说你正在使用哪种数据库提供程序吗? MySQL似乎没有问题。 – 2010-12-02 13:04:19

+2

这也让我感到困惑,但是sql没有这样设置。就像你将一个参数传递给一个SP时不能使用计算一样(前者你不能执行`exec ListPermissionsByUser @DomainName +'''+ @ UserName`) – 2010-12-02 13:05:18

回答

13

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

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

相关问题