Tengo una capa de forma con un atributo que contiene NULL
valores a los que me gustaría aplicar un filtro para valores diferentes de NULL
.
Usando la interfaz gráfica de usuario disponible para tal construcción de consultas, uno intentaría intuitivamente
"obj_art" != NULL
Lo que significa 'dame todas las características con el atributo "obj_art" diferente de NULL
' (estas cuentan definitivamente más de 0). Probar esta consulta ofrece un resultado extraño desde mi punto de vista:
Entonces, lo que he aprendido hasta ahora es que puedo lograr esto usando
"obj_art" IS NOT NULL
La pregunta es, ¿cuál es la diferencia entre != NULL
y IS NOT NULL
?
!=
no significa "no es"; significa "no es igual a".IS NOT
significa "no lo es", así que creo que esto es perfectamente intuitivo :)NULL
no es un valor yo diría que es intuitiva para tratar de usar=
o!=
como que es el modo de evaluar cualquier otro valor. No es hasta que sepa queNULL
no es un valor que es realmente intuitivo de usar enIS NOT
lugar de!=
. Muchos no son conscientes de lo queNULL
realmente es.NULL
está en la lista de valores (cp. Arriba), y por lo tanto se trata como un valor 'normal'. ¿Y no hay botónIS NULL
, o me perdí tal? Entonces, al escribir tal consulta y con el conocimiento, esoNULL
debe tratarse de una manera especial que podríamos discutir sobre la intuición, pero por supuesto no en el contexto de ESTA GUI.Respuestas:
Descargo de responsabilidad: debido a que la sintaxis para el filtrado en QGIS funciona con SQL, supongo que aquí se aplican las reglas de SQL. No estoy completamente seguro de si eso es completamente correcto, pero parece lógico y explica el comportamiento.
El filtro funciona con SQL, por eso hay que buscar una respuesta.
En resumen, cuando se utiliza un operador lógico en combinación con
null
, el resultado es siemprenull
. Pero para probarnull
, SQL viene con laIS (NOT)
funcionalidad de comparación, que permite usarlo para el filtrado deseado.Verifique la respuesta de Bohemian en stackoverflow para una discusión más profunda.
fuente
NULL
no es un valor, por lo tanto, no puede igualar=
o no igualar!=
nada. No es lo mismo que cero,0
que es un valor.A
NULL
indica que no se ha registrado ningún valor en la celda que está mirando. Para verificar si existe un valor, pregunte si la celdaIS NULL
o siIS NOT NULL
IS NULL
comprueba si la celda está vacíaIS NOT NULL
comprueba si la celda no está vacíaSi usted tiene algunos registros en los que unos valores son
One
,Two
,Three
y el restoNULL
, y desea encontrar todo lo que noTwo
se tendría que utilizar algo comovalue != 'Two' OR value IS NULL
ya que los valores NULL no se devuelven en una consulta igual / no igual. Si usara solo
value != 'Three'
el resultado, excluiría todos losNULL
registros, yaNULL
que no es un valor que puede ser igual o no igual.fuente