2013-04-12 5 views

risposta

0

Prova questo:

WHERE NOT(column LIKE '_%') 

Senza il contrario, il valore della colonna deve avere almeno un carattere e non può essere NULL.

EDIT: MySQL sembra ancora ingoiare il valore NULL in questo modo. Questo dovrebbe funzionare meglio:

WHERE IFNULL(column, '') = '' 
+0

[non sembra funzionare] (http://sqlfiddle.com/#!9/e6c26/ 1) – Kermit

27

Usa COALESCE() a 'normalizzare' il valore (convertire i valori NULL per una stringa vuota);

WHERE COALESCE(mycolumn, '') = '' 

Leggere la documentazione: COALESCE()

O viceversa; converti stringhe vuote in NULL;

WHERE NULLIF(mycolumn, '') IS NULL 

Documentazione: NULLIF()

Di questi due, io preferirei COALESCE(), in quanto fa parte della ANSI SQL standard

Si può sperimentare con voi stessi, basta fare questo;

SELECT 
    mycolumn      AS orig_value, 
    COALESCE(mycolumn, '')  AS coalesce_value, 
    (COALESCE(mycolumn, '') = '') AS compare_result 

FROM mytable; 

questo mostrerà il valore originale, il valore 'coalesce' e il risultato del lato confronto a fianco per ogni riga della tabella

+0

La versione negativa di questo sarebbe semplicemente 'WHERE COALESCE (mycolumn, '') <> '''? – vertigoelectric

+0

Sì, COALESCE restituisce il ** primo valore non nullo **. Quindi, se 'mycolumn' è' NULL', restituirà ''. Se 'mycolumn' è * qualsiasi altro valore * (inclusa una stringa vuota), verrà restituito il valore di' mycolumn'. – thaJeztah

+1

@vertigoelectric potresti fare questa domanda come "risposta"? – thaJeztah

3
WHERE COALESCE(column, '') = '' 
+0

LOL, sembra che abbiamo pubblicato la stessa soluzione allo stesso tempo :) – thaJeztah

+0

@thaJeztah lol yeah a soli 2 secondi di distanza: P – Esailija

1

Un altro metodo senza DOVE, provare questo ..

selezionerà sia vuota e valori nulli

SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename