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 ...)
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 ...)
Risposte:
Ciò seleziona tutte le righe in cui some_col
è NULL
o ''
(stringa vuota)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
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ì.
' '
, allora non funzionerà in SQLite. Gestisce solo la corrispondenza stringa identica / diretta.
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;
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.
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.
'' = ' '
Funziona effettivamente in SQL Server, ma non in SQLite, per quanto ne so, dal test ora.
Un modo più breve per scrivere la condizione:
WHERE some_col > ''
Poiché null > ''
produce unknown
, questo ha l'effetto di filtrare entrambe null
e stringhe vuote.
coalesce(some_col, '') = ''
È possibile verificare se una colonna è nulla o non è nulla utilizzando WHERE col IS NULL
o WHERE col IS NOT NULL
ad es
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Nel tuo esempio hai varie permutazioni di spazio bianco. È possibile rimuovere gli spazi vuoti usando TRIM
e si può usare COALESCE
per 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
)
prima del =
secondo esempio
Un altro metodo senza DOVE, prova questo ..
Seleziona sia i valori Vuoto che NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
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
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.
provare
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
o
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Durante il controllo del null or Empty
valore 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:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
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:
Uso di Trim per controllare-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
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 FirstName
from UserDetails
se ha un valore vuotoLastName
Spero che questo ti possa aiutare :)
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
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
NULL
valori è un altro argomento di discussione. Non credo sia opportuno formulare tale raccomandazione senza fornire il tuo ragionamento.
-1
e ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
e LTRIM
, ma no TRIM
?
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
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
select isnull(mycolumn) from mytable
restituisce 1 se mycolumn è null.