为什么不能在SQL case语句中使用位字段作为布尔表达式?
我想根据位字段是真还是假有条件地选择一些内容。这是我最初尝试的语法:为什么不能在SQL case语句中使用位字段作为布尔表达式?,sql,boolean,case,bit,Sql,Boolean,Case,Bit,我想根据位字段是真还是假有条件地选择一些内容。这是我最初尝试的语法: 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 这对我来说似乎是多余的。。。这就
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
这对我来说似乎是多余的。。。这就像在编程语言中编写IFisson==True,而不是更直观的IFisson,这与粒度背道而驰。为什么SQL是这样设置的?是因为位字段不是真正的布尔型吗?因为位数据类型不是布尔型,所以它是用于优化位存储的数据类型
字符串true和false可以转换为位这一事实可能会产生误导,但是,从中引用位是一种整数数据类型,其值可以为1、0或NULL。您还可以说您使用的是哪种数据库提供程序吗?MySQL在这方面似乎没有问题。这也让我感到困扰,但sql并不是这样设置的。正如在将参数传递给SP for ex时无法使用计算一样,您无法执行exec ListPermissionsByUser@DomainName+'\'+@UserName这似乎无法回答其原因。是的,它是1,0或null。但这只是一个可为null的布尔值,假设列允许为null。为什么SQL人员决定把它当作一个超mallint,而不是它所代表的bool,并且在99.9999%的时间里都被使用。@Vaccano:事实上,这就是答案。SQL情况下具有3种可能状态的数据类型nullable bool-bit与具有2种可能状态bool的数据类型非常不同