¿Cómo verifico si una columna está vacía o nula en MySQL?
288
Tengo una columna en una tabla que puede contener valores nulos o vacíos. ¿Cómo verifico si una columna está vacía o nula en las filas presentes en una tabla?
Si cambia la condición a WHERE some_col IS NULL OR some_col = ' '(un espacio insertado en la cadena), entonces funciona tanto en MySQL como en Oracle, consulte la respuesta de "onedaywhen". some_col = ''no funciona en Oracle ya que las cadenas vacías significan NULL allí.
Johanna
1
@Johanna pero si cambias a ' ', entonces no funcionará en SQLite. Solo maneja la coincidencia de cadenas idénticas / directas.
Magne
131
Según lo definido por el estándar SQL-92, al comparar dos cadenas de diferentes anchos, el valor más estrecho se rellena con espacios a la derecha para que tenga el mismo ancho que el valor más ancho. Por lo tanto, todos los valores de cadena que consisten completamente en espacios (incluidos los espacios cero) se considerarán iguales, por ejemplo
Gracias por mencionar los espacios acolchados. Puede beneficiarse de ellos y cambiar la condición a WHERE some_col IS NULL OR some_col = ' '(un espacio insertado en la cadena) y luego funciona tanto en MySQL como en Oracle. some_col = ''no funciona en Oracle ya que las cadenas vacías significan NULL allí y la condición completa se convierte en NULL.
Johanna
Mi requisito era encontrarme SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; y SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;trabajar para mí en MySQL. Espero que esto sea útil.
Dinuka Dayarathna
Realmente '' = ' 'funciona en SQLServer pero no en SQLite, por lo que puedo decir, desde que lo pruebo ahora.
Magne
66
Una forma más corta de escribir la condición:
WHERE some_col >''
Como null > ''produce unknown, esto tiene el efecto de filtrar nullcadenas vacías y ambas .
¿Hay alguna manera de obtener el reverso de esto, obteniendo todos los registros donde es NULL o una cadena vacía?
Joshua Pinter
14
@JoshPinter:coalesce(some_col, '') = ''
Andomar
66
Esto puede haber sido cierto alguna vez, pero no funciona en MySQL 14.14.
Gunnar Þór Magnússon
funciona muy bien y, de hecho, es la única forma en que podría descubrir cómo filtrar los campos nulos y vacíos en MariaDB
Neal Davis
1
Uso some_col <> '' para encontrar el reverso de esto
Chargnn
18
Puede probar si una columna es nula o no es nula utilizando WHERE col IS NULLo, WHERE col IS NOT NULLpor ejemplo,
SELECT myCol
FROM MyTable
WHERE MyCol ISNULL
En su ejemplo, tiene varias permutaciones de espacio en blanco. Puede eliminar el espacio en blanco usando TRIMy puede usar COALESCEpor defecto un valor NULL (COALESCE devolverá el primer valor no nulo de los valores que proporcione.
p.ej
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol,'')=''
Esta consulta final devolverá filas donde MyColes nulo o tiene cualquier longitud de espacio en blanco.
Si puede evitarlo, es mejor no tener una función en una columna en la cláusula WHERE, ya que dificulta el uso de un índice. Si simplemente desea verificar si una columna es nula o está vacía, es mejor que haga esto:
SELECT myCol
FROM MyTable
WHERE MyCol ISNULLOR MyCol =''
Usted presenta la solución real de una manera muy complicada. Primero presentas una solución incompleta a su problema "donde mycol es nulo". Luego presenta una solución usando dos funciones anidadas en la cláusula where, incluso cuando dice que esto debe evitarse. Solo entonces llegas a la solución real. En el futuro, presente su solución real primero.
esto devuelve 1 si hay algo nulo, ¿por qué es así?
noobie-php
NULLIF verifica el nombre de campo para el valor vacío y se convertiría a NULL si estaba vacío. ISNULL devuelve 1 (verdadero) si NULLIF ha cambiado con éxito un campo vacío a NULL o si ya era NULL ... intente por sí mismo en un campo nulo y vacío en una tabla con las dos funciones separadas select isnull (X) , seleccione nullif (y)
PodTech.io
9
Ya sea
SELECTIF(field1 ISNULLor field1 ='','empty', field1)as field1 from tablename
o
SELECTcasewhen field1 ISNULLor field1 =''then'empty'else field1
endas field1 from tablename
Odio los campos desordenados en mis bases de datos. Si la columna puede ser una cadena en blanco o nula, prefiero arreglar esto antes de hacer la selección cada vez, así:
UPDATE MyTable SET MyColumn=NULLWHERE MyColumn='';SELECT*FROM MyTable WHERE MyColumn ISNULL
Esto mantiene los datos ordenados, siempre y cuando no necesite diferenciar específicamente entre NULL y vacío por alguna razón.
Mientras comprobaba el null or Emptyvalor de una columna en mi proyecto, noté que hay algunas preocupaciones de soporte en varias bases de datos.
Cada base de datos no es compatible TRIM método.
A continuación se muestra la matriz solo para comprender los métodos admitidos por diferentes bases de datos.
La función TRIM en SQL se usa para eliminar el prefijo o sufijo especificado de una cadena. El patrón más común que se elimina son los espacios en blanco. Esta función se llama de manera diferente en diferentes bases de datos:
MySQL:TRIM(), RTRIM(), LTRIM()
Oráculo:RTRIM(), LTRIM()
Servidor SQL:RTRIM(), LTRIM()
Cómo verificar vacío / nulo: -
A continuación hay dos formas diferentes según las diferentes bases de datos:
La sintaxis para estas funciones de recorte son:
Uso de Trim para verificar
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Uso de LTRIM y RTRIM para verificar
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Las dos formas anteriores proporcionan el mismo resultado, solo utilícelas según su soporte de DataBase. Simplemente devuelve la tabla FirstNamefrom UserDetailssi tiene un vacíoLastName
Nunca aceptar NULLvalores es otro tema de discusión. No creo que sea apropiado hacer esa recomendación sin dar su razonamiento.
maček 12/12/11
Incluí, sé paciente. Además, realmente hace la vida difícil usar NULL (al igual que esta pregunta).
ajreal 12/12/11
55
Esa es una recomendación terrible. Establecer NOT NULL en una columna cuyo valor puede no conocerse en el momento de INSERT solo sirve para alentar el uso de valores "nulos" no estándar como -1y ''.
Dan Bechard
@ Dan, si no está seguro de cuál es el valor durante la inserción, puede tener dificultades para llevar a cabo cualquier optimización posible
¿De qué sirve usar ambos RTRIMy LTRIM, pero no TRIM?
Nico Haase
0
En mi caso, el espacio se ingresó en la columna durante la importación de datos y, aunque parecía una columna vacía, su longitud era 1. Entonces, antes que nada, verifiqué la longitud de la columna vacía y length(column)luego, en base a esto, podemos escribir una consulta de búsqueda
SELECCIONAR * DE LA TABLA DONDE LONGITUD (COLUMNA) = longitud de columna para columna vacía
select isnull(mycolumn) from mytable
devuelve 1 si mycolumn es nulo.Respuestas:
Esto seleccionará todas las filas donde
some_col
estáNULL
o''
(cadena vacía)fuente
WHERE some_col IS NULL OR some_col = ' '
(un espacio insertado en la cadena), entonces funciona tanto en MySQL como en Oracle, consulte la respuesta de "onedaywhen".some_col = ''
no funciona en Oracle ya que las cadenas vacías significan NULL allí.' '
, entonces no funcionará en SQLite. Solo maneja la coincidencia de cadenas idénticas / directas.Según lo definido por el estándar SQL-92, al comparar dos cadenas de diferentes anchos, el valor más estrecho se rellena con espacios a la derecha para que tenga el mismo ancho que el valor más ancho. Por lo tanto, todos los valores de cadena que consisten completamente en espacios (incluidos los espacios cero) se considerarán iguales, por ejemplo
Por lo tanto, esto debería funcionar independientemente de cuántos espacios componen el
some_col
valor:o más sucintamente:
fuente
WHERE some_col IS NULL OR some_col = ' '
(un espacio insertado en la cadena) y luego funciona tanto en MySQL como en Oracle.some_col = ''
no funciona en Oracle ya que las cadenas vacías significan NULL allí y la condición completa se convierte en NULL.SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
ySELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
trabajar para mí en MySQL. Espero que esto sea útil.'' = ' '
funciona en SQLServer pero no en SQLite, por lo que puedo decir, desde que lo pruebo ahora.Una forma más corta de escribir la condición:
Como
null > ''
produceunknown
, esto tiene el efecto de filtrarnull
cadenas vacías y ambas .fuente
coalesce(some_col, '') = ''
Puede probar si una columna es nula o no es nula utilizando
WHERE col IS NULL
o,WHERE col IS NOT NULL
por ejemplo,En su ejemplo, tiene varias permutaciones de espacio en blanco. Puede eliminar el espacio en blanco usando
TRIM
y puede usarCOALESCE
por defecto un valor NULL (COALESCE devolverá el primer valor no nulo de los valores que proporcione.p.ej
Esta consulta final devolverá filas donde
MyCol
es nulo o tiene cualquier longitud de espacio en blanco.Si puede evitarlo, es mejor no tener una función en una columna en la cláusula WHERE, ya que dificulta el uso de un índice. Si simplemente desea verificar si una columna es nula o está vacía, es mejor que haga esto:
Ver TRIM COALESCE y IS NULL para más información.
También trabajar con valores nulos de los documentos de MySQL
fuente
)
antes=
de su segundo ejemploOtro método sin DÓNDE, prueba esto ...
Seleccionará valores vacíos y NULL
fuente
Ya sea
o
fuente
Odio los campos desordenados en mis bases de datos. Si la columna puede ser una cadena en blanco o nula, prefiero arreglar esto antes de hacer la selección cada vez, así:
Esto mantiene los datos ordenados, siempre y cuando no necesite diferenciar específicamente entre NULL y vacío por alguna razón.
fuente
tratar
o
Referencia
fuente
Esta declaración es mucho más limpia y más legible para mí:
fuente
Mientras comprobaba el
null or Empty
valor de una columna en mi proyecto, noté que hay algunas preocupaciones de soporte en varias bases de datos.Cada base de datos no es compatible
TRIM
método.A continuación se muestra la matriz solo para comprender los métodos admitidos por diferentes bases de datos.
La función TRIM en SQL se usa para eliminar el prefijo o sufijo especificado de una cadena. El patrón más común que se elimina son los espacios en blanco. Esta función se llama de manera diferente en diferentes bases de datos:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Cómo verificar vacío / nulo: -
La sintaxis para estas funciones de recorte son:
Uso de Trim para verificar
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Uso de LTRIM y RTRIM para verificar
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Las dos formas anteriores proporcionan el mismo resultado, solo utilícelas según su soporte de DataBase. Simplemente devuelve la tabla
FirstName
fromUserDetails
si tiene un vacíoLastName
Esperando que esto te ayude :)
fuente
Si desea que los valores NULL se presenten al final al hacer un ORDER BY, intente esto:
fuente
También puedes hacer
El ser inverso
fuente
select NULL like ''
retornosNULL
, al menos en MySQL.fuente
col1 != IFNULL(col2,'')
Comprobar nulo
Verificar vacío
Sin embargo, siempre debe establecer NOT NULL para la columna, la
optimización de mysql solo puede manejar un nivel IS NULL
fuente
NULL
valores es otro tema de discusión. No creo que sea apropiado hacer esa recomendación sin dar su razonamiento.-1
y''
.fuente
RTRIM
yLTRIM
, pero noTRIM
?En mi caso, el espacio se ingresó en la columna durante la importación de datos y, aunque parecía una columna vacía, su longitud era 1. Entonces, antes que nada, verifiqué la longitud de la columna vacía y
length(column)
luego, en base a esto, podemos escribir una consulta de búsquedafuente
intente esto si el tipo de datos es una cadena y la fila es nula
si el tipo de datos es int o la columna es 0, intente esto
fuente
fuente
NULL
.