2011-12-28 16 views

risposta

164

Se solo si desidera far corrispondere "" come una stringa vuota

WHERE DATALENGTH(COLUMN) > 0 

Se si desidera contare qualsiasi stringa costituita interamente da spazi come vuoto

WHERE COLUMN <> '' 

Entrambi questi non tornerà NULL valori quando utilizzato in una clausola WHERE. Poiché NULL valuterà come UNKNOWN per questi anziché TRUE.

CREATE TABLE T 
    ( 
    C VARCHAR(10) 
); 

INSERT INTO T 
VALUES  ('A'), 
      (''), 
      (' '), 
      (NULL); 

SELECT * 
FROM T 
WHERE C <> '' 

Restituisce solo la riga singola A. Cioè Le righe con NULL o una stringa vuota o una stringa che consiste interamente di spazi sono tutte escluse da questa query.

SQL Fiddle

+3

Perché non 'DOVE COALESCE (colonna, '') <> '''? –

+6

Perché se 'column' ha un indice, la tua query probabilmente non la userà – Lamak

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

Al giorno d'oggi (4,5 anni su), per rendere più facile per un essere umano da leggere, vorrei solo usare

WHERE your_column <> '' 

Mentre v'è una tentazione di fare il controllo nullo esplicito ...

WHERE your_column <> '' 
     AND your_column IS NOT NULL 

... come @Martin Smith dimostra nella risposta accettata, in realtà non aggiunge nulla (e io personalmente evito completamente i null SQL al giorno d'oggi, quindi non si applica comunque a me!).

9

Coalesce si piega nulli in un predefinito:

COALESCE (fieldName, '') <> '' 
2

Questa condizione effettuerà un "spazio nullo, vuoto o bianco" controllare, senza manipolazione stringa inutile di LTRIM e RTRIM.

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 
4

Un indice modo amichevole per farlo è:

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

Se non ci sono molte righe o questo campo non è indicizzata, è possibile utilizzare:

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

verifica: 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 
3

in modo base

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