Come possiamo verificare in una WHEREcondizione di SQL Server se la colonna non è nulla e non la stringa vuota ( '')?
Come possiamo verificare in una WHEREcondizione di SQL Server se la colonna non è nulla e non la stringa vuota ( '')?
Risposte:
Se vuoi solo abbinare "" come stringa vuota
WHERE DATALENGTH(COLUMN) > 0
Se si desidera contare qualsiasi stringa costituita interamente da spazi come vuota
WHERE COLUMN <> ''
Entrambi non restituiranno NULLvalori se utilizzati in una WHEREclausola. Come NULLvaluterà come UNKNOWNper questi piuttosto che TRUE.
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
Restituisce solo la riga singola A. Vale a dire Le righe con NULLo una stringa vuota o una stringa costituita interamente da spazi sono tutti esclusi da questa query.
columnha un indice, probabilmente la tua query non lo utilizzerà
WHERE NULLIF(your_column, '') IS NOT NULL
Al giorno d'oggi (4,5 anni dopo), per facilitare la lettura di un essere umano, lo userei semplicemente
WHERE your_column <> ''
Mentre c'è la tentazione di rendere esplicito il controllo null ...
WHERE your_column <> ''
AND your_column IS NOT NULL
... come dimostra @Martin Smith nella risposta accettata, in realtà non aggiunge nulla (e personalmente evito i null SQL completamente al giorno d'oggi, quindi non mi applicherei comunque!).
Coalesce piegherà i null in un valore predefinito:
COALESCE (fieldName, '') <> ''
in modo semplice
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Basta controllare: dove valore> '' - non null e non vuoto
-- 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, '') <> ''?