SQL substituant la valeur NULL à l'aide de NVL, ayant des problèmes de vérification de la valeur substituée dans la clause where correctement

Je suis en cours d'exécution d'une requête pour afficher les messages lorsque la date est avant (<=) la date et l'to_date est après (>) la date actuelle.

Si le to_date est NULL, puis-je lui donner une valeur à l'aide de la NVL méthode et de faire le chèque n la clause where, et si elle n'est pas nulle, c'est à dire l'utilisateur a fourni la valeur pour elle -, alors il devrait utiliser cette valeur et de la vérification de la condition de la clause where.

select a.id,
       title,
       body,
       NVL(a.to_date, '9999-12-31 23:59:59') as todate,
       cr_date
from   a,
       b
where  a.cust_id = 20 and
       a.body_id = b.body_id and
       a.from_date <= current and 
       a.to_date > current

Cependant quand je fais exécuter cette requête pour ma base de données, je ne reçois que les résultats lorsque l'utilisateur a entré un to_date. Je NE suis PAS d'obtenir des résultats lorsque to_date est nulle et il a la valeur '9999-12-31 23:59:59' - c'est à dire:
Il échoue à l'un.to_date > état actuel, dans la clause where et n'a donc pas le retour de ces entrées. La valeur lors de la to_date est NULLE est remplacée correctement avec '9999-12 ...", mais à la condition where '> " actuel échoue.

Je veux faire de la substitution à l'intérieur de la requête et non pas comme une déclaration séparée. Logiquement je pense que cela devrait fonctionner, mais pour une raison que je vais mal quelque part . Aussi vous ne savez pas si cela a un impact sur l'exécution de la requête, mais la valeur par défaut de to_date est définie sur NULL lors de la création de la table.

Pouvez vous s'il vous plaît m'aider avec ce problème. Grâce

  • Je vais avoir un moment difficile, mais n'est-il pas aussi simple que de changer a.to_date > current à NVL(a.to_date, '9999-12-31 23:59:59') > current? Aussi, vous devriez vraiment être à l'aide de jointures de la norme ANSI, et pas a.body_id = b.body_id.
  • Pourrait également utiliser la norme ANSI-fonction COALESCE() au lieu de NVL().
  • FUSIONNER n'est pas disponible dans Informix; NVL est.
  • Ah, merci. La question n'est pas à l'origine préciser, donc, je suppose que c'était l'Oracle de la NVL().
InformationsquelleAutor user1971376 | 2013-02-26