【问题标题】:How to check for Is not Null And Is not Empty string in SQL server?如何在 SQL Server 中检查 Is not Null 和 Is not Empty 字符串?
【发布时间】:2012-01-29 10:04:03
【问题描述】:

我们如何在 SQL Server WHERE 条件中检查列是否不为空且不是空字符串 ('')?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    如果只想匹配""为空字符串

    WHERE DATALENGTH(COLUMN) > 0 
    

    如果您想将任何完全由空格组成的字符串计算为空

    WHERE COLUMN <> '' 
    

    当在WHERE 子句中使用时,这两者都不会返回NULL 值。因为NULL 将评估为UNKNOWN 而不是TRUE

    CREATE TABLE T 
      ( 
         C VARCHAR(10) 
      ); 
    
    INSERT INTO T 
    VALUES      ('A'), 
                (''),
                ('    '), 
                (NULL); 
    
    SELECT * 
    FROM   T 
    WHERE  C <> ''
    

    仅返回单行 A。 IE。带有NULL 或空字符串或完全由空格组成的字符串的行都被此查询排除在外。

    SQL Fiddle

    【讨论】:

    • 为什么不WHERE COALESCE(column, '') &lt;&gt; ''
    • 因为如果column有索引,那么你的查询很可能不会用到它
    • 我不确定,但如果你写 WHERE COL'' 这将可能进行表扫描而不是搜索。
    • @mrR - 如果您“不确定”,为什么您认为世界需要知道您的想法?碰巧你错了,SQL Server 可以将&lt;&gt; 转换为两个范围搜索。
    【解决方案2】:
    WHERE NULLIF(your_column, '') IS NOT NULL
    

    现在(4.5 年后),为了让人类更容易阅读,我会使用

    WHERE your_column <> ''
    

    虽然有明确的空检查的诱惑......

    WHERE your_column <> '' 
          AND your_column IS NOT NULL
    

    ...正如@Martin Smith 在接受的答案中所展示的那样,它并没有真正添加任何东西(我个人现在完全避开 SQL 空值,所以它无论如何都不适用于我!)。

    【讨论】:

      【解决方案3】:

      Coalesce 会将空值折叠成默认值:

      COALESCE (fieldName, '') <> ''
      

      【讨论】:

        【解决方案4】:

        一种索引友好的方式是:

        where (field is not null and field <> '')
        

        如果行数不多或该字段未编入索引,则可以使用:

         where isnull(field,'') <> ''
        

        【讨论】:

          【解决方案5】:

          只需检查:where value > '' -- 不为空且不为空

          -- COLUMN CONTAINS A VALUE (ie string not null and not empty) :
          -- (note: "<>" gives a different result than ">")
          select iif(null    > '', 'true', 'false'); -- false (null)
          select iif(''      > '', 'true', 'false'); -- false (empty string)
          select iif(' '     > '', 'true', 'false'); -- false (space)
          select iif('    '  > '', 'true', 'false'); -- false (tab)
          select iif('
          '                  > '', 'true', 'false'); -- false (newline)
          select iif('xxx'   > '', 'true', 'false'); -- true
          --
          --
          -- NOTE - test that tab and newline is processed as expected:
          select 'x   x' -- tab
          select 'x
          
          x' -- newline
          

          【讨论】:

            【解决方案6】:

            基本方式

            SELECT *
            FROM [TableName]
            WHERE column_name!='' AND column_name IS NOT NULL
            

            【讨论】:

              【解决方案7】:

              您可以使用其中任何一种来检查 null、空格和空字符串。

              WHERE COLUMN <> '' 
              
              WHERE LEN(COLUMN) > 0
              
              WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
              

              【讨论】:

                【解决方案8】:

                由于某种原因,我的 NULL 值的数据长度为 8。这就是为什么上述方法似乎都不起作用的原因。如果遇到同样的问题,请使用以下代码:

                --Check the length of your NULL values
                SELECT DATALENGTH(COLUMN) as length_column
                FROM your_table
                
                --Filter the length of your NULL values (8 is used as example)
                WHERE DATALENGTH(COLUMN) > 8
                

                【讨论】:

                • 这可能是包含 NVARCHAR 数据类型的单词 NULL 的字符串,而不是实际的 NULL。要查找这些字符串,您可以使用 = N'NULL',因为它们只是常规字符串!
                【解决方案9】:

                以下语句对我有用。

                $sql = "SELECT table_name FROM product_reviews WHERE title > '0'  
                and  product='Product name'";
                
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-21
                  • 2011-04-25
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-11-04
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多