2009-03-25 5 views
4

première prise, la solution de bidouille, approche sentinelle (il est impératif que votre programme ne devrait pas permettre l'entrée de la valeur sentinelle):comparaison égalité SQL/inégalité des valeurs nullables

select coalesce(a, -2147483648) = coalesce(b, -2147483648) as is_equal -- a little postgresism 

disons que vous avez oublié de bloquer la valeur sentinelle dans votre programme, l'utilisateur a entré -2147483648 dans le champ B et A est null. le code ci-dessus signale vrai, devrait signaler faux, ne devrait pas signaler vrai ou nul.

Quelle est la manière la plus concise de comparer l'égalité sur des champs nullables? A == B devrait simplement déclarer vrai ou faux seulement, peu importe si les champs sont valables ou non.

Répondre

0

L'opérateur < => fait ce que vous voulez dans les autres moteurs de base de données; n'est-ce pas en postgres? Sinon, a is null and b is null or (a is not null and b is not null and a == b) devrait fonctionner. Cela fonctionne parce que FALSE AND NULL est FALSE.

+0

ne fonctionne pas sur postgresql (ou d'autres rdbms d'ailleurs). bastards mysql chanceux pour cet opérateur :-p de toute façon, +1 juste au cas où certains mysqlers chance sur ce problème – Hao

+0

Au moins avec Oracle, les opérateurs habituels ne fonctionnent pas comme prévu avec des valeurs nulles ... – Thilo

Questions connexes