我试图选择一个布尔表达式.
这不起作用:
select *,
(Column = 'x') as isX
from MyTable;
-- Incorrect syntax near '='.
Run Code Online (Sandbox Code Playgroud)
但这样做:
select *,
IIF(Column = 'x', 1, 0) as isX
from MyTable;
Run Code Online (Sandbox Code Playgroud)
我认为第一个解决方案应该有效.
有比使用更优雅的解决方案IIF吗?
不,由于一些潜在的原因:
= 也用于为变量赋值,因此在某些情况下语法会模糊不清:
DECLARE @var INT
SELECT @var = 0 -- do you mean "set @var to 0" or "select true if @var IS 0"?
Run Code Online (Sandbox Code Playgroud)SQL中没有本机布尔类型 - BIT是最接近的模拟类型.
另一个(更标准)选项是CASE:
select *,
CASE WHEN Column = 'x' THEN 1 ELSE 0 END as isX
from MyTable;
Run Code Online (Sandbox Code Playgroud)