La concaténation de chaîne avec une valeur null semble annuler la totalité de la chaîne -, c'est que le comportement désiré dans Postgres?

Dans Postgres:

select 'test' || null  returns null

Je m'attendais à ce qu'il aurait autrement le retour de "test".

Est ce comportement souhaité? Bizarre que la concaténation de chaîne avec une valeur null annulerait l'ensemble de la chaîne de...

Se référant à la pg docs: http://www.postgresql.org/docs/9.1/static/functions-string.html

"Remarque: Avant de PostgreSQL 8.3, ces fonctions silencieusement accepter des valeurs de plusieurs types de données string ainsi, en raison de la présence de l'implicite forçages de ces types de données texte. Ces contraintes ont été supprimés car ils n'ont souvent causé surprenant comportements. Toutefois, l'opérateur de concaténation de chaîne (||) accepte encore de la non-entrée de chaîne, tant qu'au moins une entrée est de type chaîne, comme le montre le Tableau 9-6. Pour les autres cas, insérer explicitement la contrainte de texte si vous avez besoin de reproduire le comportement précédent."

Étant donné que, à l'aide de leur fonction string concat exemple:

concat(str "tout" [, str "tout" [, ...] ])
texte Concaténer tous les arguments. NULL arguments sont ignorés. concat('abcde', 2, NULL, 22) >> abcde222

Dois-je juste s'habituer à ce problème avec un '||' concaténation ou est-ce quelque chose qui doit être fixe?

  • Ce n'est pas seulement "désirée", c'est ainsi qu'il est spécifié dans le standard SQL.
  • qu'elle est la norme SQL est tout ce que je vraiment besoin de savoir, votre commentaire doit être la réponse. Semble pas intuitif mais. Il m'a mis au défi de regarder comment les autres langues gérer ce cas. C#, semble offrir l'intuitif - le traitement de la valeur null comme une chaîne de longueur nulle. Javascript et Java concaténer "null" à votre chaîne (sheesh).
InformationsquelleAutor Reinsbrain | 2016-01-21