【问题标题】:IsEmpty function like ISNULL in SQL Server?SQL Server 中的 ISNULL 之类的 IsEmpty 函数?
【发布时间】:2013-08-07 08:29:06
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008-r2


    【解决方案1】:

    试试NULLIF如下

    NULLIF(@SKU,'')
    

    【讨论】:

    【解决方案2】:

    请尝试:

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

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

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

    【讨论】:

    • IsNull(,NULL) 不是多余的吗?
    • 是的......我们可以避免这种情况。
    • 可能看起来多余,但它是标题中问题的答案。如果我们将括号中的 NULL 替换为 ,我们将得到一个功能完善的 IsEmpty 函数。这正是我想要的。以下代码将空字符串更改为错误消息:ISNULL(NULLIF(@YourValue,''), 'No value entered')
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这可能是您正在寻找的:

      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() 。我完全忘记了它的存在。

      【讨论】:

        【解决方案5】:

        select 子句中试试下面。

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

        Where 子句中。

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

        【讨论】:

          【解决方案6】:
          SELECT ISNULL( CASE StringColum1  WHEN '' THEN NULL ELSE textcolum1 END ,textcolum2) 
          

          【讨论】:

          • 不要只写代码。解释也是必要的
          【解决方案7】:

          如果你认为 ' ' 是空字符串,你可以使用

          LEN(RTRIM(ISNULL(FieldName,''))) > 0

          【讨论】:

            猜你喜欢
            • 2010-09-15
            • 1970-01-01
            • 2010-09-09
            • 2017-06-03
            • 2011-04-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-13
            相关资源
            最近更新 更多