Vergleichen von Datumsangaben in Oracle mit Hilfe der Funktion decode
Brauche ich, um zu vergleichen zwei Daten mit dem Oracle-Funktion decode, um zu sehen, wenn man less than or equal
zu den anderen.
Fand ich diesen Artikel - http://www.techonthenet.com/oracle/functions/decode.php
Welche Staaten (an der Unterseite), dass die unten decode-Funktion zurückkehren wird, wenn date1 date2 > Datum2 :
decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)
Würden diese nicht zurück, wenn date1 date2 >= date2 ?
Oder ist es nur, wenn Datum1 > date2?
Gibt es eine einfachere Lösung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird diese Funktion return date2 wenn date2 <= Datum1. Einstecken in den Werten und der übersetzung in pseudo-code erhalten Sie
if 0 - 0 = 0 then date2 else date1
wo beide Datumsangaben sind identisch.Die beste Lösung, wenn Sie mit 8i oder höher ist die Verwendung
case
:Seit
case
ermöglicht Ungleichheit Betreiber, es ist sehr viel besser lesbar.@Allan hat schon die beste Lösung für mich, aber wenn Sie darauf bestehen, mit
decode
- Funktion, können Sie das Ergebnissign
- Funktion statt.http://www.techonthenet.com/oracle/functions/sign.php
sign(a)
zurück-1
wenna < 0
,0
wenna = 0
und1
wenna > 0
. Also die Logikwerden könnte, geschrieben mit
decode
in der folgenden Weise:Könnten Sie versuchen, die
- months_between
Funktion. Es berechnet die Anzahl der Monate zwischen zwei Datumsangaben, die als Dezimalzahl.In diesem Beispiel ist der erste Parameter größer als der zweite, so wird es wieder 1. Die zweite Zeile gibt ~0.48 (bei der Ausführung etwa 11:30 Uhr AM 2010-09-01), Um das aktuelle Datum Werte:
Im Allgemeinen:
Update:
Nach einigen Experimenten scheint es, dass die feinsten Granularität dieser Funktion ist Tag.
...0 zurück,
aber
zurück 0.032258064516129.
Einige andere interessante date Unterschied/Vergleich-Techniken hier: http://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns
Werden, wenn Sie versuchen, um zu überprüfen von Datum - das heißt, jedes mal, wenn in 1/1 ist weniger als 1/2, und jeder auf 1/1 ist gleich jeder anderen Zeit auf 1/1, auch wenn die Oracle-DATUM größer ist - dann will man vergleichen wie folgt:
TRUNC(DATUM1) <= TRUNC(DATE2)
Ich sehe das nicht in den anderen Antworten, es ist so einfach es macht mich Frage mich, ob ich bin Missverständnis der Frage.
zurück date2 wenn Datum1 >= Datum2
Dieser ist besser: