Saltar al contenido

La comparación con NULL en PostgreSQL da un resultado inesperado

No dejes de compartir nuestra página y códigos en tus redes sociales, necesitamos tu ayuda para hacer crecer esta comunidad.

Solución:

PostgreSQL distingue entre lo vacío string y NULL (a diferencia de varchar en Oracle). Comparando cualquier cosa con, o llamando a cualquier función (a menos que CALL ON NULL INPUT esté configurado en la función), un valor NULL devuelve NULL.

Su primera comparación será NULL si pcc.mac es NULL, pero su segunda consulta devuelve true como el vacío string no es igual a ‘SIMONE.GISELIA’

> select '' <> 'TEST';
 ?column?
----------
 t
(1 row)

> select btrim(upper(NULL)) <> 'TEST';
 ?column?
----------
 (null)
(1 row)

NULL no es un valor de verdad, es por eso que su expresión CASE se evalúa como 2.

> SELECT CASE WHEN NULL <> 'test' THEN 1 ELSE 2 END;
 case
------
    2
(1 row)

Time: 0.285 ms
> SELECT CASE WHEN '' <> 'test' THEN 1 ELSE 2 END;
 case
------
    1
(1 row)

Puede usar la función coalesce para devolver otro valor cuando un valor es NULL; probablemente tenga sentido que te unas al vacío string en tu consulta:

> SELECT coalesce(NULL, '') <> 'TEST';
 ?column?
----------
 t
(1 row)

los IS DISTINCT FROM el operador también hace lo que necesita: trata NULL como cualquier otro valor para las comparaciones:

> SELECT NULL IS DISTINCT FROM 'SOMETHING';
 ?column?
----------
 t
(1 row)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *