Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不能在SQL case语句中使用位字段作为布尔表达式?_Sql_Boolean_Case_Bit - Fatal编程技术网

为什么不能在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的数据类型非常不同