DateTime-Vergleich in Oracle

Mache ich einen Vergleich zwischen mehreren Terminen in meiner gespeicherten Prozedur.

    TODAY := TO_DATE(TO_CHAR(SYSDATE, 'DD-MON-YYYY') || 
             ' 09:00:00', 'DD-MON-YYYY HH24:MI:SS');

    IF PREVIOUS_DATE < TODAY AND 
       TO_DATE(CURRENT_DATE, 'DD-MON-YYYY HH24:MI:SS') >= TODAY THEN
        -- do something
    ELSE
        -- do something else

Wenn ich CURRENT_DATE = SYSDATE es nicht in die IF Teil. Kann mir jemand sagen, wo habe ich falsch gemacht?

  • Warum willst du konvertieren SYSDATE erste, um ein zeichenliteral ist einfach es zu konvertieren zurück zu einem DATE danach? Dies ist völlig nutzlos und wegen der MON format zum scheitern verurteilt in verschiedenen NLS-Umgebungen. today := sysdate ist viel sicherer und korrigieren sowie. Und Umwandlung eines CURRENT_DATE ist einen Termin zu einer DATE mit to_date() nutzlos ist genauso gut.
  • Ich Stimme zwar voll und ganz, dass 'MO' als Teil einer Maske format sollte wenn immer möglich vermieden werden, in diesem Fall, sollte es in jedem NLS-Einstellung seit der OP ist mit MON konsequent (es sei denn, der hin-und her-Konvertierungen durchgeführt werden, in einer anderen Sitzung mit unterschiedlichen NLS-Einstellungen) - oder täusche ich mich?
  • sorry für die parameter CURRENT_DATE, ich habe nicht bemerkt, es ist eine Funktion in oracle, meinem eigentlichen parameter name ist CUR_DATE, nur um deutlich zu machen, damit ich umschreiben, dass es mit CURRENT_DATE
  • Aber trotzdem: die Umwandlung der DATEPART-hin und her macht keinen Sinn.
InformationsquelleAutor noobie | 2013-04-24
Schreibe einen Kommentar