我正在努力:
select tbl.*, (true and true) as booleanTest
from tbl
这 ms-sql 似乎并不欣赏。(关键字“和”附近的语法不正确)
因无知而幸福,我认为这是标准的 ANSI 东西。
Q:以上可以用更通用的sql语法来表达吗?
我正在努力:
select tbl.*, (true and true) as booleanTest
from tbl
这 ms-sql 似乎并不欣赏。(关键字“和”附近的语法不正确)
因无知而幸福,我认为这是标准的 ANSI 东西。
Q:以上可以用更通用的sql语法来表达吗?
SQL Server 不支持标准 SQL 的BOOLEAN
数据类型,记住它是一种非常奇怪的布尔值,它具有三个值!代替BOOLEAN
文字值,您必须替换为所需真值的表达式,例如
( 1 = 1 ) -- TRUE
( 0 = 1 ) -- FALSE
( 1 = NULL ) -- UNKNOWN
我通常写这样的代码(按照你的例子):
SELECT tbl.*,
CASE
WHEN ( ( 1 = 1 ) AND ( 1 = 1 ) ) THEN 'TRUE'
WHEN NOT ( ( 1 = 1 ) AND ( 1 = 1 ) ) THEN 'FALSE'
ELSE 'UNKNOWN'
END AS result
FROM tbl;
正如@Diego 所暗示的那样(我认为!),在传统逻辑中,我们可以应用幂等 重写规则,它指出
( P AND P ) <= is equivalent to => ( P )
碰巧,该规则适用于 SQL 的三值逻辑。
例如,在 SQL Server 中的案例证明( UNKNOWN AND UNKNOWN ) <=> UNKNOWN
:
SELECT CASE
WHEN ( 1 = NULL) AND ( 1 = NULL ) THEN 'TRUE'
WHEN NOT ( 1 = NULL) AND ( 1 = NULL ) THEN 'FALSE'
ELSE 'UNKNOWN'
END AS result
你期望达到什么目标?SQl 上没有布尔值,因此您可以执行以下操作:
declare @a bit
declare @b bit
set @a=0
set @b=1
select
case
when @a=@b then 1
when not @a=@b then 0
else null
end as Bool_test
可能的结果:
@a @b Result
0 0 1
0 1 0
1 0 0
1 1 1
NUll any_value NULL
any_value NULL NULL