Quel est l'équivalent PostgreSQL pour ISNULL ()


255

Dans MS SQL-Server, je peux faire:

SELECT ISNULL(Field,'Empty') from Table

Mais dans PostgreSQL, j'obtiens une erreur de syntaxe. Comment émuler la ISNULL()fonctionnalité?


1
Non, vous ne pouvez pas faire cela dans MSSQL. Ce code ne sera pas compilé. ISNULLprend deux arguments et renvoie le second est le premier est null, sinon le premier.
GSerg

@GSerg, vous avez raison. corrigé cela.
Byron Whitlock

Gserg et Byron oui, vous pouvez voir ici Exemple de mon PC SELECT isnull (a.FechaEntregada, '') comme test de dbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx
Juan

Réponses:


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

Ou plus idiomatique:

SELECT coalesce(field, 'Empty') AS field_alias

49
+1 pour coalesce. (PS Vous pouvez aussi le faire dans MS SQL Server.)
Alison R.

2
Il existe cependant d'autres cas d'utilisation de IS NULL, il est donc bon de connaître les deux.
Kyle Butt

30
Je pense qu'il vaut la peine de noter que c'est coalesceen standard SQL, avec isnullune fonction spécifique à MS qui est essentiellement coalesceavec seulement deux paramètres.
GSerg

4
Coalesce () gère également la promotion de type correctement (exactement comme le fait UNION SELECT), contrairement à IsNull ().
ErikE

2
Il convient de souligner qu'ISNULL et COALESCE ne sont pas identiques. IsNull force le type de résultat au type d'argument1, tandis que la fusion utilise les types respectifs pour chaque argument. Si vous recherchez et remplacez simplement isnull avec coalesce, vous pouvez potentiellement obtenir beaucoup d'erreurs ...
Stefan Steiger

76

Utilisez COALESCE()plutôt:

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

Il fonctionne de la même manière ISNULL, mais offre plus de fonctionnalités. Coalesce renverra la première valeur non nulle de la liste. Donc:

SELECT COALESCE(null, null, 5); 

renvoie 5, tandis que

SELECT COALESCE(null, 2, 5);

renvoie 2

Coalesce prendra un grand nombre d'arguments. Il n'y a pas de maximum documenté. J'ai testé ça va 100 arguments et ça a réussi. Cela devrait être suffisant pour la grande majorité des situations.


24

Comment émuler la fonctionnalité ISNULL ()?

SELECT (Field IS NULL) FROM ...

4
Cela émule la fonctionnalité exacte de isnull, je ne sais pas pourquoi il est sous
évalué

La meilleure réponse à la question, bien sûr. Cette expression est l'équivalent complet de ISNULL (). COALESCE () est très intelligent et intéressant à connaître, mais il ne peut pas exécuter un ISNULL () tant qu'il est fermé.
Skrol29

17
Je ne sais pas à quoi ISNULLvous faites référence, mais field IS NULLdonne une valeur booléenne, tandis que ISNULLdans SQL Server fonctionne comme COALESCE: il renvoie l'une des non- NULLvaleurs. Cette réponse est terriblement fausse. Consultez la documentation: ISNULL.
jpmc26

10
Je soupçonne que ces commentateurs sont des utilisateurs de MySQL qui n'ont pas réalisé que la question commence par, "Dans MS SQL Server, ..." MySQL a une fonction ISNULL () qui prend un seul argument et renvoie 0 ou 1. La version de T-SQL prend deux arguments et se comporte comme COALESCE ou NVL d'Oracle.
David Noha

1
greatvovan, Que ce soit ou non l'intention de l'affiche originale, je crois que ce que les gens veulent, c'est la réponse à "Comment puis-je vérifier si un champ est nul", pas nécessairement "Comment fonctionne exactement la fonction ISNULL". C'était le cas avec moi et cette réponse est parfaite pour ça.
Freeman Helmuth

15

Essayer:

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

3
C'est bien car cela couvre le cas où un champ de texte n'est PAS nul, mais aussi «vide».
soulia

-9

Créez la fonction suivante

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'

Et ça marchera.

Vous pouvez créer différentes versions avec différents types de paramètres.


28
S'il vous plaît, personne ne fait ça. Utilisez plutôt coalesce () pour que votre DBA ne vous déteste pas.
Jordan

1
postgres veuillez ajouter isnull pour que personne ne déteste personne.
Eric Twilegar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.