IsEmpty函数类似于SQL Server中的ISNULL



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

按以下尝试NULLIF

NULLIF(@SKU,'')

请尝试:

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

如果值为NULL、空或空格,则返回NULL。

注:如果两个表达式不等价,则NULLIF返回第一个表达式。如果表达式是等效的,则NULLIF返回第一个表达式类型的空值。

使用SET @SKU = NULLIF(@SKU,'')将@SKU设置为null,其中@SKU等于第二个参数的值。

IsEmpty不是一个内置的t-SQL函数,但NULLIF可以用于实现类似的行为。

这可能就是您想要的:

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¸

EDIT2

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

请在select子句中尝试以下内容。

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

Where条款。

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

就我个人而言,我不喜欢其他一些答案中嵌套的NULLIFISNULL。我发现这个逻辑很难遵循,更喜欢使用简单的IIF( condition, true_value, else_value )

SQL使用三值逻辑truefalseunknown

对于IIF,如果condition的计算结果为true,则进入第一种情况,否则(当为falseunknown时)则进入else情况。

NULL(无论是=还是<>LIKE还是NOT LIKE)的比较将评估为unknown

因此,您只需要仔细考虑您想要的语义,并以一种方式来表达它,即根据需要,空字符串可以加上或不加NULL

需要注意的另一件事是,SQL Server通常会忽略LEN或字符串比较的尾部空格。然而,它确实将它们视为LIKE在LHS上的重要价值。

因此,以下表达式提供了各种不同的语义来选择所需的语义。

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)

返回

测试下的值字符串长度IsEmptyIsNullOrEmptyIsZeroLengthIsNullOrZeroLength
0正确正确正确正确
1正确正确错误错误
NULLNULL错误正确错误正确
4错误错误错误错误

如果您将"视为空字符串,则可以使用

LEN(RTRIM(ISNULL(字段名,''))>0

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

case when LEN(isnull(iv.value2, 'Y')) = 0 then 'Y' else 'N' end isEmpty
SELECT ISNULL( CASE StringColum1  WHEN '' THEN NULL ELSE textcolum1 END ,textcolum2) 

最新更新