sql >> Base de Datos >  >> RDS >> SQLite

Diferencia entre NullIf() y IfNull() en SQLite

SQLite tiene una función llamada nullif() y otra función llamada ifnull() , cada uno de los cuales tiene un propósito diferente.

  • nullif() le permite tratar ciertos valores como NULL. Puede pensar en ello como "devolver NULL si...".
  • ifnull() le permite reemplazar valores NULL con otro valor. Puede pensar en ello como "si es NULL, entonces...".

Así que básicamente hacen lo contrario el uno del otro. Uno reemplaza los valores NULL con otro valor y el otro reemplaza otro valor con NULL.

Ejemplos

En algunos casos, ambas funciones pueden devolver el mismo resultado. Por ejemplo:

SELECT
  nullif(1, 2),
  ifnull(1, 2);

Resultado:

nullif(1, 2)  ifnull(1, 2)
------------  ------------
1             1           

El nullif() La función devuelve una copia de su primer argumento si los argumentos son diferentes y NULL si los argumentos son los mismos. En este caso, los argumentos son diferentes y devuelve el primer argumento.

El ifnull() Por otro lado, la función devuelve una copia del primer argumento no NULL. En este caso, ambos argumentos no eran NULL, por lo que se devolvió el primer argumento.

Con el siguiente ejemplo, empezamos a ver la diferencia entre estas dos funciones:

SELECT
  nullif(1, 1),
  ifnull(1, 1);

Resultado:

nullif(1, 1)  ifnull(1, 1)
------------  ------------
              1           

El nullif() la función devuelve NULL cuando ambos argumentos eran iguales. En este caso, ambos argumentos eran los mismos, por lo que nullif() hizo su trabajo y devolvió NULL.

El ifnull() La función devuelve el primer argumento que no es NULL y, en este caso, devolvió el primer argumento.

El hecho de que ambos argumentos sean iguales no significa nada para ifnull() . Simplemente devuelve el primer argumento no NULL. Dicho esto, si ambos argumentos son NULL, devuelve NULL.

Intentemos agregar algunos valores NULL.

SELECT
  nullif(NULL, 1),
  ifnull(NULL, 1);

Resultado:

nullif(NULL, 1)  ifnull(NULL, 1)
---------------  ---------------
                 1              

En este caso, nullif() devolvió NULL porque NULL es el primer argumento (recuerde que nullif() devuelve su primer argumento si ambos argumentos son diferentes).

ifnull() por otro lado, devolvió su primer argumento no NULL.

Así es como se ve si cambiamos los argumentos.

SELECT
  nullif(1, NULL),
  ifnull(1, NULL);

Resultado:

nullif(1, NULL)  ifnull(1, NULL)
---------------  ---------------
1                1              

Ambos argumentos son diferentes, por lo que nullif() devuelve el primer argumento.

El primer argumento no es NULL, por lo que ifnull() lo devuelve.