如果我让MySQL执行SELECT (0 < 1)
,则返回1;否则,返回0。但是,如果我在SQL Server中运行此select语句,则会给我一个错误:
'<'附近的语法不正确。
我还测试了其他运算符,例如!=和<,并得到相同的错误。我很困惑。 “ 0 <1”是一个表达式,为什么SQL Server无法对其求值?
答案 0 :(得分:2)
与其他SQL Server数据类型不同,布尔数据类型不能为 指定为表列或变量的数据类型,并且不能 返回结果集。
[...]
在WHERE子句中使用具有布尔数据类型的表达式来 筛选符合搜索条件的行,并在 流控制语言语句,例如IF和WHILE
因此存在布尔数据类型,您无法在WHERE子句(例如)之外使用它。
MySQL SELECT x < 1
(返回0、1或NULL)的正确SQL Server等效项将是:
SELECT CASE
WHEN x < 1 THEN 1
WHEN NOT (x < 1) THEN 0
ELSE NULL -- you can omit this line
END
最后,LEN(NULL)
为NULL,并且(通常来说)对NULL的任何操作都会产生NULL。因此,条件IF LEN(NULL) < 1
将不会执行,IF LEN(NULL) >= 1
也将不会执行。
答案 1 :(得分:0)
MS SQL没有布尔类型。它支持布尔值 expressions ,但这些不能是变量或结果集中的值。
您能做的最好的事情就是
select case when 0 < 1 then 0 else 1 end
结果集将具有一个正常的整数(bit
类型有时用于表示true / false值,但它只是一个可能值为1和0的数字)。
答案 2 :(得分:0)
我很困惑。 “ 0 <1”是一个表达式,为什么SQL Server无法对其求值?
有点是,不是。这是一个谓词,SQL Server对谓词的处理与产生 values 的其他表达式不同。
SQL Server没有用户可见的布尔数据类型,因此您无法编写一个表达式来生成此不存在的数据类型的值。
您只能在特定位置使用谓词,例如WHERE
子句,ON
子句,WHEN
子句(CASE
表达式的一部分)和{{1 }}约束(还有其他约束)