Jak możemy sprawdzić w SQL Server WHERE
warunek, czy kolumna nie ma wartości NULL, a nie pusty ciąg ( ''
)?
Jak możemy sprawdzić w SQL Server WHERE
warunek, czy kolumna nie ma wartości NULL, a nie pusty ciąg ( ''
)?
Odpowiedzi:
Jeśli chcesz dopasować tylko „” jako pusty ciąg
WHERE DATALENGTH(COLUMN) > 0
Jeśli chcesz policzyć dowolny ciąg składający się w całości ze spacji jako pusty
WHERE COLUMN <> ''
Oba nie zwrócą NULL
wartości, jeśli zostaną użyte w WHERE
klauzuli. Jak NULL
oceni, jak UNKNOWN
dla nich, a nie TRUE
.
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
Zwraca tylko pojedynczy wiersz A
. Tj. Wiersze z NULL
lub pusty ciąg lub ciąg składający się całkowicie ze spacji są wykluczone przez to zapytanie.
column
ma indeks, to twoje zapytanie prawdopodobnie go nie wykorzysta
WHERE NULLIF(your_column, '') IS NOT NULL
Teraz (po 4,5 roku), aby ułatwić człowiekowi czytanie, po prostu skorzystam
WHERE your_column <> ''
Podczas gdy istnieje pokusa, aby jawnie sprawdzić zerowanie ...
WHERE your_column <> ''
AND your_column IS NOT NULL
... jak pokazuje @Martin Smith w zaakceptowanej odpowiedzi, tak naprawdę nic nie dodaje (a ja osobiście całkowicie unikam null SQL, więc i tak by mnie to nie dotyczyło!).
Coalesce złoży wartości zerowe w wartość domyślną:
COALESCE (fieldName, '') <> ''
w podstawowy sposób
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Wystarczy sprawdzić: gdzie wartość> '' - nie jest pusta i pusta
-- 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
WHERE COALESCE(column, '') <> ''
?