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?
(e.g. null or '' or ' ' or ' ' and ...)
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?
(e.g. null or '' or ' ' or ' ' and ...)
Respuestas:
Esto seleccionará todas las filas donde some_col
está NULL
o ''
(cadena vacía)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
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
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Por lo tanto, esto debería funcionar independientemente de cuántos espacios componen el some_col
valor:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
o más sucintamente:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
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 <> ' ';
y SELECT * 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:
WHERE some_col > ''
Como null > ''
produce unknown
, esto tiene el efecto de filtrar null
cadenas vacías y ambas .
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,
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
En su ejemplo, tiene varias permutaciones de espacio en blanco. Puede eliminar el espacio en blanco usando TRIM
y puede usar COALESCE
por 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 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:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Ver TRIM COALESCE y IS NULL para más información.
También trabajar con valores nulos de los documentos de MySQL
)
antes =
de su segundo ejemplo
Otro método sin DÓNDE, prueba esto ...
Seleccionará valores vacíos y NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Ya sea
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 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=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Esto mantiene los datos ordenados, siempre y cuando no necesite diferenciar específicamente entre NULL y vacío por alguna razón.
tratar
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
o
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
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: -
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 FirstName
from UserDetails
si tiene un vacíoLastName
Esperando que esto te ayude :)
Si desea que los valores NULL se presenten al final al hacer un ORDER BY, intente esto:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Comprobar nulo
$column is null
isnull($column)
Verificar vacío
$column != ""
Sin embargo, siempre debe establecer NOT NULL para la columna, la
optimización de mysql solo puede manejar un nivel IS NULL
NULL
valores es otro tema de discusión. No creo que sea apropiado hacer esa recomendación sin dar su razonamiento.
-1
y ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
y LTRIM
, pero no TRIM
?
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
intente esto si el tipo de datos es una cadena y la fila es nula
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
si el tipo de datos es int o la columna es 0, intente esto
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
devuelve 1 si mycolumn es nulo.