Come possiamo verificare in una WHERE
condizione di SQL Server se la colonna non è nulla e non la stringa vuota ( ''
)?
Come possiamo verificare in una WHERE
condizione 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 NULL
valori se utilizzati in una WHERE
clausola. Come NULL
valuterà come UNKNOWN
per 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 NULL
o una stringa vuota o una stringa costituita interamente da spazi sono tutti esclusi da questa query.
column
ha 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, '') <> ''
?