Як перевірити, чи не є Null And Not Empty string на SQL сервері?


202

Як ми можемо перевірити WHEREстан SQL Server, чи не стовпець стовпця, а не порожній рядок ( '')?

Відповіді:


303

Якщо ви хочете "" відповідати лише порожньому рядку

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


6
Чому ні WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers

10
Тому що якщо columnіндекс має, ваш запит, ймовірно, не використовуватиме його
Lamak

106
WHERE NULLIF(your_column, '') IS NOT NULL

Сьогодні (4,5 роки), щоб полегшити людському читанню, я просто скористався

WHERE your_column <> ''

Хоча існує спокуса зробити явну перевірку явною ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

... як демонструє @Martin Smith у прийнятій відповіді, він насправді нічого не додає (і я особисто в даний час відхиляюсь від нуля SQL, тому це все одно не стосується мене!).




7

Індексуючий спосіб зробити це:

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

Якщо рядків не багато або це поле не індексується, ви можете використовувати:

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

2

Ви можете використовувати будь-яку з них для перевірки нульового, пробільного та порожнього рядків.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

Просто перевірте: де значення> '' - не нулеве і не порожнє

-- 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.