Come posso verificare se una colonna è vuota o nulla in MySQL?


288

Ho una colonna in una tabella che potrebbe contenere valori nulli o vuoti. Come posso verificare se una colonna è vuota o nulla nelle righe presenti in una tabella?

(e.g. null or '' or '  ' or '      ' and ...)

1
Codice MySQL: select isnull(mycolumn) from mytablerestituisce 1 se mycolumn è null.
Eric Leschinski,

2
che dire di lunghezza (trim (mycolumn))> 0?
Cyril Jacquart,

Per MSSQL> DOVE COLONNA <> '' O DOVE LEN (COLONNA)> 0 O DOVE NULLIF (LTRIM (RTRIM (COLUMN)), '') NON È NULL
DxTx

Risposte:


444

Ciò seleziona tutte le righe in cui some_colè NULLo ''(stringa vuota)

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';

7
Se cambi la condizione in WHERE some_col IS NULL OR some_col = ' '(uno spazio inserito nella stringa), allora funziona sia su MySQL che su Oracle, vedi la risposta di "onedaywhen". some_col = ''non funziona su Oracle poiché stringhe vuote significano NULL lì.
Johanna,

1
@Johanna ma se passi a ' ', allora non funzionerà in SQLite. Gestisce solo la corrispondenza stringa identica / diretta.
Magne,

131

Come definito dallo standard SQL-92, quando si confrontano due stringhe di diversa larghezza, il valore più stretto viene riempito con gli spazi a destra per renderlo della stessa larghezza del valore più ampio. Pertanto, tutti i valori di stringa costituiti interamente da spazi (inclusi gli spazi zero) saranno considerati uguali, ad es

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

Pertanto, questo dovrebbe funzionare indipendentemente da quanti spazi compongono il some_col valore:

SELECT * 
  FROM T
 WHERE some_col IS NULL 
       OR some_col = ' ';

o più succintamente:

SELECT * 
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;

6
Grazie per aver menzionato gli spazi imbottiti. Puoi trarne vantaggio e modificare la condizione in WHERE some_col IS NULL OR some_col = ' '(uno spazio inserito nella stringa), quindi funziona sia su MySQL che su Oracle. some_col = ''non funziona su Oracle poiché stringhe vuote significano NULL lì e la condizione completa diventa NULL.
Johanna,

Il mio requisito era trovare SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; e SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;lavorare per me in MySQL. Spero che questo sia utile.
Dinuka Dayarathna,

'' = ' 'Funziona effettivamente in SQL Server, ma non in SQLite, per quanto ne so, dal test ora.
Magne,

66

Un modo più breve per scrivere la condizione:

WHERE some_col > ''

Poiché null > ''produce unknown, questo ha l'effetto di filtrare entrambe nulle stringhe vuote.


2
C'è un modo per ottenere il contrario di questo, ottenere tutti i record in cui è NULL o una stringa vuota?
Joshua Pinter,

14
@JoshPinter:coalesce(some_col, '') = ''
Andomar,

6
Questo potrebbe essere vero qualche volta, ma non funziona in MySQL 14.14.
Gunnar Þór Magnússon,

funziona alla grande ed è in effetti l'unico modo in cui sono riuscito a capire come filtrare i campi nulli e vuoti in MariaDB
Neal Davis,

1
Uso some_col <> '' per trovare il contrario
Chargnn l'

18

È possibile verificare se una colonna è nulla o non è nulla utilizzando WHERE col IS NULLo WHERE col IS NOT NULLad es

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

Nel tuo esempio hai varie permutazioni di spazio bianco. È possibile rimuovere gli spazi vuoti usando TRIMe si può usare COALESCEper default un valore NULL (COALESCE restituirà il primo valore non nullo dai valori forniti.

per esempio

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = '' 

Questa query finale restituirà le righe dove MyColè nullo o è qualsiasi lunghezza di spazio bianco.

Se puoi evitarlo, è meglio non avere una funzione su una colonna nella clausola WHERE in quanto rende difficile usare un indice. Se vuoi semplicemente verificare se una colonna è nulla o vuota, è meglio farlo:

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

Vedi TRIM COALESCE e IS NULL per maggiori informazioni.

Funziona anche con valori null dai documenti MySQL


2
Presenti la vera soluzione in un modo molto contorto. Innanzitutto si presenta una soluzione incompleta al suo problema "dove mycol è null". Quindi si presenta una soluzione utilizzando due funzioni nidificate nella clausola where, anche se si dice che questo dovrebbe essere evitato. Solo allora arrivi alla vera soluzione. In futuro, presenta prima la tua vera soluzione.

Manca un segno )prima del =secondo esempio
Rorrim

15

Un altro metodo senza DOVE, prova questo ..

Seleziona sia i valori Vuoto che NULL

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

questo restituisce 1 se c'è qualcosa di nullo, perché è così?
noobie-php,

il NULLIF controlla fieldname per il valore vuoto e convertirà in NULL se fosse vuoto. ISNULL restituisce 1 (vero) se NULLIF ha modificato con successo un campo vuoto in NULL o se era già NULL .... prova da solo su un campo nullo e vuoto in una tabella con le due funzioni separate select isnull (X) , seleziona nullif (y)
PodTech.io

9

O

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename

o

SELECT case when field1 IS NULL or field1 = ''
        then 'empty'
        else field1
   end as field1 from tablename

6

Odio i campi disordinati nei miei database. Se la colonna potrebbe essere una stringa vuota o null, preferirei correggere questo prima di fare la selezione ogni volta, in questo modo:

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

Ciò mantiene i dati in ordine, purché non sia necessario differenziare in modo specifico NULL e svuotare per qualche motivo.


5

provare

SELECT 0 IS NULL ,  '' IS NULL , NULL IS NULL

-> 0, 0, 1

o

SELECT ISNULL('  ') , ISNULL( NULL )
 -> 0 ,1

Riferimento


5

Questa affermazione è molto più chiara e più leggibile per me:

select * from my_table where ISNULL(NULLIF(some_col, ''));

4

Durante il controllo del null or Emptyvalore di una colonna nel mio progetto, ho notato che esistono vari problemi di supporto in vari database.

Ogni database non supporta TRIM metodo.

Di seguito è la matrice solo per comprendere i metodi supportati da diversi database.

La funzione TRIM in SQL viene utilizzata per rimuovere il prefisso o il suffisso specificato da una stringa. Il modello più comune che viene rimosso sono gli spazi bianchi. Questa funzione viene chiamata in modo diverso nei diversi database:

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracolo: RTRIM(), LTRIM()
  • Server SQL: RTRIM(), LTRIM()

Come controllare Vuoto / Null: -

Di seguito sono riportati due modi diversi in base a diversi database:

La sintassi per queste funzioni di taglio sono:

  1. Uso di Trim per controllare-

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. Uso di LTRIM e RTRIM per controllare-

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

Sopra entrambi i modi fornire lo stesso risultato basta usare in base al supporto DataBase. Restituisce semplicemente la tabella FirstNamefrom UserDetailsse ha un valore vuotoLastName

Spero che questo ti possa aiutare :)


3

Se si desidera visualizzare i valori NULL per ultimi quando si esegue un ORDER BY, provare questo:

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;

3

Puoi anche fare

SELECT * FROM table WHERE column_name LIKE ''

L'essere inverso

SELECT * FROM table WHERE column_name NOT LIKE ''

Apparentemente non funziona: select NULL like ''ritorna NULL- almeno in MySQL.
Tito,

2
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';

Ho avuto un problema rispetto a un campo che a volte era nullo. Ciò ha aiutato:col1 != IFNULL(col2,'')
webaholik,

1

Controlla null

$column is null
isnull($column)

Controlla vuoto

$column != ""

Tuttavia, dovresti sempre impostare NOT NULL per la colonna, l'
ottimizzazione mysql può gestire solo un livello IS NULL


3
Non accettare mai NULLvalori è un altro argomento di discussione. Non credo sia opportuno formulare tale raccomandazione senza fornire il tuo ragionamento.
maček,

Ho incluso, sii paziente. Inoltre è davvero complicato la vita usando NULL (proprio come questa domanda).
Ajreal

5
Questa è una raccomandazione terribile. L'impostazione di NOT NULL su una colonna il cui valore potrebbe non essere noto al momento di INSERT serve solo a incoraggiare l'uso di valori "null" non standard come -1e ''.
Dan Bechard,

@Dan se non sei sicuro di quale sia il valore durante l'inserimento, potresti avere difficoltà a condurre qualsiasi ottimizzazione
possilbe

0
select * from table where length(RTRIM(LTRIM(column_name))) > 0

1
Qual è il punto di usare entrambi RTRIMe LTRIM, ma no TRIM?
Nico Haase,

0

Nel mio caso, lo spazio è stato inserito nella colonna durante l'importazione dei dati e sebbene sembrasse una colonna vuota la sua lunghezza era 1. Quindi prima di tutto ho controllato la lunghezza della colonna dall'aspetto vuoto usando length(column)quindi sulla base di questo possiamo scrivere una query di ricerca

SELEZIONA * DALLA TABELLA DOVE LUNGHEZZA (COLONNA) = lunghezza della colonna per la colonna vuota


-1

provare questo se il tipo di dati è stringa e la riga è nulla

SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

se il tipo di dati è int o la colonna è 0, provare questo

SELECT * FROM table WHERE column_name > = 0

-2
SELECT column_name FROM table_name WHERE column_name IN (NULL, '')

1
Risposta sbagliata. Questo non selezionerà NULL.
Pang
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.