En comparant les dates dans Oracle à l'aide de la fonction de décodage
J'ai besoin de comparer deux dates à l'aide de l'Oracle de décoder la fonction pour voir si l'on est less than or equal
à l'autre.
J'ai trouvé cet article - http://www.techonthenet.com/oracle/functions/decode.php
Qui stipule (en bas) que le dessous de décoder la fonction sera de retour date2 si date1 > date2 :
decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)
Ne serait-ce pas le retour date2 si date1 >= date2 ?
Ou est-il juste si date1 > date2?
Est-il une solution plus simple?
OriginalL'auteur Freddy | 2010-09-01
Vous devez vous connecter pour publier un commentaire.
Que la fonction sera de retour date2 si date2 <= date1. Brancher les valeurs et la traduction d'un pseudo-code, vous obtenez
if 0 - 0 = 0 then date2 else date1
où les deux dates sont les mêmes.La meilleure solution, si vous utilisez 8i ou plus tard, est d'utiliser
case
:Depuis
case
permet l'inégalité des opérateurs, c'est beaucoup plus lisible.OriginalL'auteur Allan
@Allan a déjà donné la meilleure solution pour moi, mais si vous insistez sur l'utilisation de
decode
fonction, vous pouvez traiter le résultat design
fonction de la place.http://www.techonthenet.com/oracle/functions/sign.php
sign(a)
retourne-1
sia < 0
,0
sia = 0
et1
sia > 0
. Ainsi, la logique suivantepourrait être réécrite en utilisant
decode
de la manière suivante:OriginalL'auteur be here now
Vous pouvez essayer de le
months_between
fonction. Il va calculer le nombre de mois entre deux dates, comme un nombre décimal.Dans cet exemple, la première paramater est plus grande que la seconde, de sorte qu'il sera de retour 1. La deuxième ligne renvoie ~0.48 (lorsqu'il est exécuté à environ 11:30 AM sur 2010-09-01) Pour obtenir la date réelle de valeurs:
En général:
Mise à jour:
Après une période d'expérimentation, il semble la plus fine granularité de cette fonction est le Jour.
...sera de retour 0
mais
sera de retour 0.032258064516129.
Certains autres intéressant la date de la différence/comparer les techniques ici: http://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns
OriginalL'auteur FrustratedWithFormsDesigner
Si vous essayez de vérifier par date - qui est, à chaque fois dans le 1/1 est inférieure à 1/2, et tout le 1/1 est égal à tout autre moment sur 1/1, même si l'Oracle DATE est plus grand, alors vous voulez comparer comme suit:
TRUNC(DATE1) <= TRUNC(DATE2)
Je ne vois pas cela dans les autres réponses, il est donc de base il me fait me demander si je suis pas compris la question.
Excellent point, j'ai représenté que comme je l'ai déjà travailler avec des dates assez souvent, mais c'est un bon de mentionner si d'autres sont à la recherche à de cette.
OriginalL'auteur orbfish
sera de retour date2 quand date1 >= date2
OriginalL'auteur Michael Pakhantsov
C'est mieux:
OriginalL'auteur Ciurdy