Come verificare se la stringa non è nulla e non è vuota nel server SQL?


202

Come possiamo verificare in una WHEREcondizione di SQL Server se la colonna non è nulla e non la stringa vuota ( '')?

Risposte:


305

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.

SQL Fiddle


6
Perché no WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers,

10
Perché se columnha un indice, probabilmente la tua query non lo utilizzerà
Lamak,

106
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!).


15

Coalesce piegherà i null in un valore predefinito:

COALESCE (fieldName, '') <> ''

8

in modo semplice

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

7

Un modo per indicizzare ciò è:

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

Se non ci sono molte righe o questo campo non è indicizzato, puoi usare:

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

2

È possibile utilizzare uno di questi per controllare null, spazi bianchi e stringhe vuote.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.