2010-02-06 21 views
191

En MS SQL-Server, que puede hacer:Cuál es el equivalente de PostgreSQL para ISNULL()

SELECT ISNULL(Field,'Empty') from Table

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

+1

No, no puedes hacer eso en MSSQL. Ese código no se compilará. 'ISNULL' toma dos argumentos y devuelve el segundo; el primero es' nulo'; de lo contrario, el primero. – GSerg

+0

@GSerg, tienes razón. arregló eso. –

+0

Gserg y Byron sí se pueden ver aquí Ejemplo de mi PC isnull SELECT (a.FechaEntregada, '') como prueba de dbo.Amonestacion un https://msdn.microsoft.com/en-us/ library/ms184325.aspx – Juan

Respuesta

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

O más idiomática:

SELECT coalesce(field, 'Empty') AS field_alias 
+37

+1 para 'coalesce'. (P.S. También puede hacerlo en MS SQL Server). –

+1

Existen otros casos para usar IS NULL, por lo que es bueno saber ambos. –

+26

Creo que vale la pena señalar que es 'coalesce' que está en SQL estándar, con' isnull' es una función específica de MS que esencialmente es 'coalesce' con solo dos parámetros. – GSerg

-7

crear 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 que va a trabajar.

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

+24

Por favor, nadie hace esto. Utilice coalesce() para que su DBA no lo odie. – Jordan

58

Uso COALESCE() lugar:

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

Funciona muy parecido a ISNULL, aunque proporciona una mayor funcionalidad. Coalesce devolverá el primer valor no nulo en la lista. Así:

SELECT COALESCE(null, null, 5); 

retornos 5, mientras que

SELECT COALESCE(null, 2, 5); 

devuelve 2

Coalesce a tomar un gran número de argumentos. No hay un máximo documentado. Probé 100 argumentos y tuvo éxito. Esto debería ser suficiente para la gran mayoría de las situaciones.

16

¿Cómo emulo la funcionalidad ISNULL()?

SELECT (Field IS NULL) FROM ... 
+4

Esto emula la funcionalidad exacta de isnull, no estoy seguro de por qué es downvoted – smackshow

+3

@artur Usted no entiende cómo funciona isnull. – datashaman

+0

La mejor respuesta para la pregunta, por supuesto. Esta expresión es el equivalente completo de ISNULL(). COALESCE() es muy inteligente e interesante de saber pero no puede realizar un ISNULL() mientras está cerrado. – Skrol29

10

Probar:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name 
+1

Esto es bueno ya que cubre el caso cuando un campo de texto NO es nulo, sino también 'vacío'. – soulia

Cuestiones relacionadas