¿Cuál es el equivalente de PostgreSQL para ISNULL ()

255

En MS SQL-Server, puedo hacer:

SELECT ISNULL(Field,'Empty') from Table

Pero en PostgreSQL me sale un error de sintaxis. ¿Cómo emulo la ISNULL()funcionalidad?

Byron Whitlock
fuente
1
No, no puedes hacer eso en MSSQL. Ese código no se compilará. ISNULLtoma dos argumentos y devuelve el segundo es el primero es null, de lo contrario el primero.
GSerg
@GSerg, tienes razón. arreglado eso.
Byron Whitlock
Gserg y Byron sí, puedes ver aquí Ejemplo de mi PC SELECT isnull (a.FechaEntregada '') como prueba de dbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx
Juan

Respuestas:

453
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

O más idiomático:

SELECT coalesce(field, 'Empty') AS field_alias
Kyle Butt
fuente
49
+1 para coalesce. (PD: También puedes hacer eso en MS SQL Server).
Alison R.
2
Sin embargo, hay otros casos para usar IS NULL, por lo que es bueno saber ambos.
Kyle Butt
30
Creo que vale la pena señalar que coalesceestá en el estándar SQL, isnullsiendo una función específica de MS que esencialmente tiene coalescesolo dos parámetros.
GSerg
44
Coalesce () también maneja la promoción de tipos correctamente (exactamente como lo hace UNION SELECT), mientras que IsNull () no.
ErikE
2
Vale la pena señalar que ISNULL y COALESCE no son lo mismo. IsNull fuerza el tipo de resultado al tipo de argumento1, mientras que la fusión utiliza los tipos respectivos para cada argumento. Si solo busca y reemplaza isnull con coalesce, puede obtener muchos errores ...
Stefan Steiger
76

Use en su COALESCE()lugar:

SELECT COALESCE(Field,'Empty') from Table;

Funciona de manera similar ISNULL, aunque proporciona más funcionalidad. Coalesce devolverá el primer valor no nulo de la lista. Así:

SELECT COALESCE(null, null, 5); 

devuelve 5, mientras

SELECT COALESCE(null, 2, 5);

devuelve 2

La fusión tomará una gran cantidad de argumentos. No hay un máximo documentado. Lo probé con 100 argumentos y tuvo éxito. Esto debería ser suficiente para la gran mayoría de las situaciones.

Jim Clouse
fuente
24

¿Cómo emulo la funcionalidad ISNULL ()?

SELECT (Field IS NULL) FROM ...
Artur
fuente
44
Esto emula la funcionalidad exacta de isnull, sin saber por qué se downvoted
smackshow
La mejor respuesta para la pregunta, por supuesto. Esta expresión es el equivalente completo de ISNULL (). COALESCE () es muy inteligente e interesante de conocer, pero no puede realizar un ISNULL () mientras está cerrado.
Skrol29
17
No sé a qué ISNULLse refieren sus comentaristas, pero field IS NULLda un valor booleano, mientras que ISNULLen SQL Server funciona como COALESCE: devuelve uno de los no NULLvalores. Esta respuesta es terriblemente incorrecta. Consulte la documentación: ISNULL.
jpmc26
10
Sospecho que estos comentaristas son usuarios de MySQL que no se dieron cuenta de que la pregunta comienza con "En MS SQL Server ..." MySQL tiene una función ISNULL () que toma un solo argumento y devuelve 0 o 1. La versión de T-SQL toma dos argumentos y se comporta como COALESCE o Oracle's NVL.
David Noha
1
greatvovan, Si esta fue o no la intención del póster original, creo que lo que la gente quiere es la respuesta a "Cómo verifico si un campo es nulo", no necesariamente "Cómo funciona exactamente la función ISNULL". Ese fue el caso conmigo y esta respuesta es perfecta para eso.
Freeman Helmuth
15

Tratar:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name
usuario2718914
fuente
3
Esto es bueno ya que cubre el caso cuando un campo de texto NO es nulo, sino que también está "vacío".
soulia
-9

Crea la siguiente función

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 "
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'

Y funcionará.

Puede crear diferentes versiones con diferentes tipos de parámetros.


fuente
28
Por favor, nadie haga esto. Use coalesce () en su lugar para que su DBA no lo odie.
Jordania
1
postgres por favor agrega isnull para que nadie odie a nadie.
Eric Twilegar