是否像SQL Server中的ISNULL一样为空函数?

egdjgwm8  于 2023-02-07  发布在  SQL Server
关注(0)|答案(9)|浏览(332)

我有这个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中是可能的。

kxeu7u2r

kxeu7u2r1#

尝试如下NULLIF

NULLIF(@SKU,'')
92vpleto

92vpleto2#

请尝试:

SET @YourValue=ISNULL(NULLIF(@YourValue,' '), NULL)

如果值为NULL、空或空格,则返回NULL。
注:如果两个表达式不等价,则NULLIF返回第一个表达式。如果表达式等价,则NULLIF返回第一个表达式类型的空值。

wfauudbj

wfauudbj3#

使用SET @SKU = NULLIF(@SKU,'')将@SKU设置为null,其中@SKU等于第二个参数的值。
IsEmpty不是内置的T-SQL函数,但NULLIF可用于实现类似的行为。

iqjalb3h

iqjalb3h4#

这可能是你要找的:

SET @SKU = CASE @SKU WHEN '' THEN NULL ELSE @SKU END
    • 编辑**

对于你所有的变量...

SELECT
  @ID = CASE @ID WHEN '' THEN NULL ELSE @ID END,
  @Name = CASE @Name WHEN '' THEN NULL ELSE @Name END,
  @PhoneNumber = CASE @PhoneNumber WHEN '' THEN NULL ELSE @PhoneNumber END,
  @Price = CASE @Price WHEN '' THEN NULL ELSE @Price END,
  @NewPrice = CASE @NewPrice WHEN '' THEN NULL ELSE @NewPrice END,
  @ModelNumber = CASE @ModelNumber WHEN '' THEN NULL ELSE @ModelNumber END,
  @SKU = CASE @SKU WHEN '' THEN NULL ELSE @SKU END¸
    • 编辑2**

如果有人使用我建议的那种代码,忘记它,像其他人建议的那样使用NULLIF()。我完全忘记了它的存在。

mtb9vblg

mtb9vblg5#

select子句中尝试以下内容。

select ISNULL( nullif(EmptyOrNullOrBlankColumn,'' ),NULL)

以下Where条款。

where ISNULL( nullif(EmptyOrNullOrBlankColumn,'' ),NULL) is not null
yvfmudvl

yvfmudvl6#

就我个人而言,我不喜欢其他一些答案中嵌套的NULLIFISNULL,我发现这种逻辑很难理解,所以更喜欢使用简单的IIF( condition, true_value, else_value )
SQL使用三值逻辑truefalseunknown
对于IIF,如果condition的计算结果为true,则进入第一种情况,否则(当falseunknown时),则进入else情况。
NULL的比较(无论是=<>LIKE还是NOT LIKE)将评估为unknown
因此,您只需要仔细考虑所需的语义,并以空字符串将根据需要使用或不使用NULL进行分组的方式来表达它。
另一件需要注意的事情是,SQL Server通常会忽略LEN或字符串比较的尾随空格,但是它会将它们视为LHS的LIKE值中的重要空格。
因此,下面的表达式提供了各种不同的语义,以便从中选择所需的表达式。

SELECT 
  ValueUnderTest
 ,StringLength = DATALENGTH(ValueUnderTest)
 ,IsEmpty = IIF(ValueUnderTest = '', 'True', 'False') 
 ,IsNullOrEmpty = IIF(ValueUnderTest <> '', 'False', 'True')
 ,IsZeroLength = IIF('' LIKE ValueUnderTest, 'True', 'False')
 ,IsNullOrZeroLength = IIF('' NOT LIKE ValueUnderTest, 'False', 'True')
 FROM
 (
 VALUES (''),  
        (' '), 
        (NULL), 
        ('Fish')
 ) TestData(ValueUnderTest)

返回
| 待测值|字符串长度|为空|为空或为空|为零长度|为空或零长度|
| - ------|- ------|- ------|- ------|- ------|- ------|
| | 无|真的|真的|真的|真的|
| | 1个|真的|真的|假|假|
| 零|零|假|真的|假|真的|
| 鱼|四个|假|假|假|假|

djp7away

djp7away7#

如果将“”视为空字符串,则可以使用
长度(RTRIM(ISNULL(字段名,'')))〉0

rkkpypqq

rkkpypqq8#

当你想要的是一个布尔结果,例如Y/N或true/false,如在报告中,那么这种建议的简单语句,如NULLIF将不会有帮助。这里是一个解决方案:

case when LEN(isnull(iv.value2, 'Y')) = 0 then 'Y' else 'N' end isEmpty
w9apscun

w9apscun9#

SELECT ISNULL( CASE StringColum1  WHEN '' THEN NULL ELSE textcolum1 END ,textcolum2)

相关问题