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

23

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

Usandolainterfazgráficadeusuariodisponibleparatalconstruccióndeconsulta,unointentaríademaneraintuitiva

"obj_art" != NULL

Loquesignificaque'medatodaslasfuncionesconelatributo"obj_art" diferente de NULL ' (estas cuentan definitivamente más de 0). La prueba de esta consulta ofrece un resultado extraño desde mi punto de vista:

Entonces,loqueheaprendidohastaahoraesquepuedolograrestoutilizando

"obj_art" IS NOT NULL

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

    
pregunta Jochen Schwarze 25.07.2016 - 19:37

2 respuestas

31

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

El filtro funciona con SQL, por eso tienes que buscar una respuesta.

En resumen, cuando se usa un operador lógico en combinación con null , el resultado siempre es null . Pero para probar null , SQL viene con la funcionalidad de comparación IS (NOT) , que le permite usarlo para el filtrado deseado.

Consulte la respuesta de Bohemian sobre stackoverflow para una discusión más detallada.

    
respondido por el karpfen 25.07.2016 - 20:17
19

NULL es no un valor, por lo tanto, no puede ser igual a = o no ser igual a != . No es lo mismo que cero 0 , que es un valor.

Un NULL indica que no se ha registrado ningún valor en la celda que está viendo. Para verificar si existe un valor, pregunte 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 donde los valores son One , Two , Three y el resto NULL y desea encontrar todo lo que no sea Two , deberá usar algo como

value != 'Two' OR value IS NULL

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

    
respondido por el Midavalo 25.07.2016 - 20:26

Lea otras preguntas en las etiquetas