¿Cuál es el equivalente de la función NVL de Oracle en MySQL?
Cuando estamos realizando consultas contra una base de datos, en nuestro SELECT es posible que estemos usando campos que puedan ser iguales a NULL y que pueden afear nuestras salidas o directamente, crearnos problemas en nuestros desarrollos (por ejemplo porque tratemos de forma lógica lo mismo la cadena vacía y el NULL).
Para resolver estas cuestiones, en Oracle existe la función NVL(elemento, reemplazo) que básicamente hace lo siguiente: si el elemento es igual a NULL, en la salida saca la cadena “reemplazo”.
En MySQL la función tiene otro nombre: IFNULL y su referencia en MySQL es la siguiente:
IFNULL(
expr1
,expr2
)
Si expr1
no es NULL
, IFNULL()
retorna expr1
, de otro modo retorna expr2
. IFNULL()
retorna un valor numérico o de cadena de caracteres, en función del contexto en que se usa.
mysql> SELECT IFNULL(1,0); -> 1 mysql> SELECT IFNULL(NULL,10); -> 10 mysql> SELECT IFNULL(1/0,10); -> 10 mysql> SELECT IFNULL(1/0,'yes'); -> 'yes'
Un ejemplo que acabo de usar, imaginad una tabla llamada “equipos” con un campo de nombre “comentarios” que en ocasiones es NULL y queremos que aparezca al mostrar el informe como “Vacío” en esos casos en lugar de como “(NULL)”, sólo tendríamos que hacer lo siguiente:
SELECT IFNULL(comentarios, "Vacío") FROM equipos