28 votos

¿Cuál es la diferencia entre != NULL y IS NOT NULL en las expresiones de filtro de QGIS?

Tengo una capa de forma con un atributo que contiene NULL a los que quiero aplicar un filtro para valores diferentes de NULL .

enter image description here

Utilizando la interfaz gráfica de usuario disponible para la construcción de este tipo de consultas, uno intentaría intuitivamente

"obj_art" != NULL

enter image description here

Lo que significa _'dame todas las características con atributo "obj_art" diferente de NULL '_ (estos cuentan definitivamente más que 0). Probar esta consulta ofrece un resultado extraño desde mi punto de vista:

enter image description here

Así que lo que he aprendido hasta ahora es que puedo lograr esto mediante el uso de

"obj_art" IS NOT NULL

La pregunta es, ¿cuál es la diferencia entre != NULL y IS NOT NULL ?

0 votos

Por lo que sé, es sólo sintaxis. Cuando es null usa is o is not. Si no, usa = o !=

0 votos

"uno lo intentaría intuitivamente" ¿De verdad? ¿Por qué? NULL no es un valor. Es literalmente la ausencia de un valor. No se puede "igualar" a NULL. El operador != no significa "no es", sino "no es igual a". IS NOT significa "no es", así que creo que es perfectamente intuitivo :)

0 votos

@LightnessRacesinOrbit Sin la comprensión de que NULL no es un valor yo diría que es intuitivo para intentar utilizar = o != ya que así es como se evalúa cualquier otro valor. No es hasta que NULL no es un valor que sea realmente intuitivo de usar IS NOT en lugar de != . Muchos no saben lo que es un NULL realmente lo es.

35voto

ddiepo Puntos 11

Descargo de responsabilidad: Dado que la sintaxis para filtrar en QGIS funciona con SQL, estoy asumiendo aquí que se aplican las reglas SQL. No estoy completamente seguro de si eso es del todo correcto, pero parece lógico y explica el comportamiento.


El filtro funciona con SQL, por eso tienes que buscar ahí la respuesta.

En resumen, cuando se utiliza un operador lógico en combinación con null el resultado es siempre null . Pero para comprobar null SQL viene con el IS (NOT) funcionalidad de comparación, lo que permite utilizarlo para el filtrado previsto.

Consulte Respuesta de @Bohemian en StackOverflow para un debate más profundo.

1 votos

Su suposición en el descargo de responsabilidad es completamente correcta

24voto

Gavin Schulz Puntos 592

NULL es no un valor, por lo tanto no puede ser igual a = o no igual != cualquier cosa. 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á consultando. Para comprobar si existe un valor se pregunta si la celda IS NULL o si IS NOT NULL

  • IS NULL comprueba si la celda está vacía
  • IS NOT NULL comprueba si la celda no está vacía

Si tiene algunos registros con valores One , Two , Three y el resto NULL y quieres encontrar todo lo que no es Two tendría que utilizar algo como

value != 'Two' OR value IS NULL 

ya que los valores NULL no se devuelven en una consulta igual/no igual. Si sólo utilizara value != 'Three' el resultado excluiría a todos NULL registros como NULL no es un valor que pueda ser igual o no igual.

1 votos

Gracias. Tropezó con esto después de un montón de búsqueda de por qué mi A != 'sí' no estaba funcionando. Dado que todos los demás valores eran NULL que estaba devolviendo 0 resultados - que no era intuitivo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X