我有这个sql,
IF(@ID = '')
BEGIN
SET @ID = NULL;
END
IF(@Name = '')
BEGIN
SET @Name = NULL;
END
IF(@PhoneNumber = '')
BEGIN
SET @PhoneNumber = NULL;
END
IF(@Price = '')
BEGIN
SET @Price = NULL;
END
IF(@NewPrice = '')
BEGIN
SET @NewPrice = NULL;
END
IF(@ModelNumber = '')
BEGIN
SET @ModelNumber = NULL;
END
IF(@SKU = '')
BEGIN
SET @SKU = NULL;
END
我在寻找ISNULL这样的IsEmpty函数。这样我就可以,
ISEMPTY(@SKU, NULL)
这在SQL中是可能的。
9条答案
按热度按时间kxeu7u2r1#
尝试如下NULLIF
92vpleto2#
请尝试:
如果值为NULL、空或空格,则返回NULL。
注:如果两个表达式不等价,则
NULLIF
返回第一个表达式。如果表达式等价,则NULLIF
返回第一个表达式类型的空值。wfauudbj3#
使用
SET @SKU = NULLIF(@SKU,'')
将@SKU设置为null,其中@SKU等于第二个参数的值。IsEmpty
不是内置的T-SQL函数,但NULLIF
可用于实现类似的行为。iqjalb3h4#
这可能是你要找的:
对于你所有的变量...
如果有人使用我建议的那种代码,忘记它,像其他人建议的那样使用NULLIF()。我完全忘记了它的存在。
mtb9vblg5#
在
select
子句中尝试以下内容。以下
Where
条款。yvfmudvl6#
就我个人而言,我不喜欢其他一些答案中嵌套的
NULLIF
和ISNULL
,我发现这种逻辑很难理解,所以更喜欢使用简单的IIF( condition, true_value, else_value )
SQL使用三值逻辑
true
、false
和unknown
。对于
IIF
,如果condition
的计算结果为true
,则进入第一种情况,否则(当false
或unknown
时),则进入else
情况。与
NULL
的比较(无论是=
、<>
、LIKE
还是NOT LIKE
)将评估为unknown
。因此,您只需要仔细考虑所需的语义,并以空字符串将根据需要使用或不使用
NULL
进行分组的方式来表达它。另一件需要注意的事情是,SQL Server通常会忽略LEN或字符串比较的尾随空格,但是它会将它们视为LHS的LIKE值中的重要空格。
因此,下面的表达式提供了各种不同的语义,以便从中选择所需的表达式。
返回
| 待测值|字符串长度|为空|为空或为空|为零长度|为空或零长度|
| - ------|- ------|- ------|- ------|- ------|- ------|
| | 无|真的|真的|真的|真的|
| | 1个|真的|真的|假|假|
| 零|零|假|真的|假|真的|
| 鱼|四个|假|假|假|假|
djp7away7#
如果将“”视为空字符串,则可以使用
长度(RTRIM(ISNULL(字段名,'')))〉0
rkkpypqq8#
当你想要的是一个布尔结果,例如Y/N或true/false,如在报告中,那么这种建议的简单语句,如NULLIF将不会有帮助。这里是一个解决方案:
w9apscun9#