【发布时间】:2021-02-12 07:06:02
【问题描述】:
我正在尝试编写一个 T-SQL 语句,它将比较两个可空变量(int 或 varchar)@x 和 @y,如果两个值相等或两个值都等于 NULL,则返回 FALSE,否则返回 TRUE。 A 和 B 都是可能值的占位符。
+------+------+--------+
| @x | @y | Result |
+------+------+--------+
| NULL | NULL | False |
| A | A | False |
| B | A | True |
| A | B | True |
| NULL | A | True |
| A | NULL | True |
+------+------+--------+
我可以使用COALESCE(@x,@y) 来验证@x 和@y 是否为NULL。由于没有任何值可以等于(或不等于)NULL,因此我不能使用 或 = 运算符。写这样的声明最紧凑的方式是什么?是不是一定要陈述一堆条件,比如:(@x is not NULL and @y is not null and @x <> @y) or (@x is not null and @y is null) or (@x is null and @y is not null)?
【问题讨论】:
-
当这是您查询中的选择列时,以下答案很好。但您可能希望在 where 子句中坚持使用
(@x is not NULL and @y is not null and @x <> @y)之类的内容,以确保可搜索性。
标签: sql-server tsql null