Как проверить, не является Null и не является пустой строкой в SQL server?



Как мы можем проверить в SQL Server WHERE условие, не является ли столбец null и не пустой строкой ('')?

684   8  

8 ответов:

если вы только хотите, чтобы соответствовать "" как пустую строку

WHERE DATALENGTH(COLUMN) > 0 

если вы хотите считать любую строку, состоящую полностью из пробелов, как пустую

WHERE COLUMN <> '' 

оба они не вернутся NULL значения при использовании в WHERE предложения. Как NULL будет оценивать как UNKNOWN для них, а не TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

INSERT INTO T 
VALUES      ('A'), 
            (''),
            ('    '), 
            (NULL); 

SELECT * 
FROM   T 
WHERE  C <> ''

возвращает только одну строку A. То есть строки с NULL или пустая строка или строка, состоящая полностью из пробелов являются все исключено этим запросом.

SQL Fiddle

WHERE NULLIF(your_column, '') IS NOT NULL

В настоящее время (4,5 года), чтобы человеку было легче читать, я бы просто использовал

WHERE your_column <> ''

пока есть соблазн сделать нулевую проверку явной...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

...Как показывает @Martin Smith в принятом ответе, он действительно ничего не добавляет (и я лично полностью избегаю SQL-нулей в настоящее время, поэтому он все равно не будет применяться ко мне!).

Coalesce будет складывать нули в значение по умолчанию:

COALESCE (fieldName, '') <> ''

индекс дружественный способ сделать это:

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

Если строк не так много или это поле не индексируется, вы можете использовать:

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

в основном

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

это условие будет выполнять проверку" Null, пустой или пробел", без ненужных манипуляций со строкой LTRIM и RTRIM.

SELECT
            *
    FROM
            [Table]
    WHERE
            COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 

вы можете использовать любой из них для проверки null, пробелов и пустых строк.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL

просто проверьте: где значение > " -- not null and not empty

-- 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

Comments

    Ничего не найдено.