Die Funktion ADD_MONTHS gibt das korrekte Datum in Oracle nicht zurück

8

Sehen Sie sich die Ergebnisse der folgenden Abfragen an:

%Vor%

Wie kann ich "30-MAR-11" erhalten, wenn ich 4 Monate zu einem bestimmten Datum hinzufüge?

Bitte helfen Sie.

    
Mohamed Saligh 18.03.2011, 07:32
quelle

9 Antworten

8

Hier gibt es eine weitere Frage zu Oracle und Java

Es besagt, dass

  

Aus der Oracle-Referenz auf add_months Ссылка

     

Wenn das Datum der letzte Tag des Monats ist oder der resultierende Monat weniger Tage als die Tageskomponente des Datums hat, ist das Ergebnis der letzte Tag des resultierenden Monats. Andernfalls hat das Ergebnis die gleiche Tageskomponente wie das Datum.

Ich denke, Sie müssen den Tag und den Endtag manuell überprüfen, um das Verhalten der Funktion zu ändern. Oder vielleicht indem Sie Tage statt Monate hinzufügen. (Aber ich fand keine add_day Funktion in der Referenz)

    
M'vy 18.03.2011, 07:46
quelle
4

Als Workaround könnte ich möglicherweise diesen Algorithmus verwenden:

  1. Berechnen Sie das Zieldatum TargetDate1 mit ADD_MONTHS .
  2. Alternativ berechnen Sie das Zieldatum TargetDate2 wie folgt:

    1) Wenden Sie ADD_MONTHS auf den ersten Monat des Quelldatums an 2) addiere die Differenz der Tage zwischen dem Quelldatum und dem Anfang desselben Monats.

  3. Wählen Sie die LEAST zwischen TargetDate1 und TargetDate2 .

Das Zieldatum wird also am Ende eine andere Tageskomponente enthalten, wenn die Tageskomponente des Quelldatums größer ist als die Anzahl der Tage im Zielmonat. In diesem Fall ist das Zieldatum der letzte Tag des entsprechenden Monats.

Ich bin mir nicht ganz sicher, ob ich Oracle-SQL-Syntax verstehe, aber im Grunde könnte die Implementierung so aussehen:

%Vor%

Hier ist eine detaillierte Illustration, wie die Methode funktioniert:

%Vor%

Und hier sind einige Beispiele, um verschiedene Fälle zu zeigen:

%Vor%     
Andriy M 18.03.2011 10:01
quelle
3

Sie können Intervallarithmetik verwenden, um das gewünschte Ergebnis zu erhalten

%Vor%

Beachten Sie jedoch, dass es Probleme mit Intervallarithmetik gibt, wenn Sie mit Tagen arbeiten, die nicht in jedem Monat existieren

%Vor%     
Justin Cave 01.04.2011 07:16
quelle
1

Wie wäre es mit so etwas:

%Vor%

Ergebnis: 30-NOV-10

%Vor%

Ergebnis: 30-MAR-11

    
tekla 15.02.2013 16:42
quelle
0
  

Die Funktion add_months gibt ein Datum plus n Monate zurück.

Da der 30. November das letzte Datum des Monats ist, führt das Hinzufügen von 4 Monaten zu einem Datum, das das Ende von 4 Monaten darstellt. Dies ist das erwartete Verhalten. Wenn die Datumsangaben nicht geändert werden müssen, können Sie den Tag, nachdem das neue Datum zurückgegeben wurde, als Workaround abziehen

%Vor%     
Sathya 18.03.2011 07:46
quelle
0
%Vor%

Dieser Abschnitt in Klammern:

%Vor%

gibt Ihnen die Anzahl der Tage zwischen dem Datum der Eingabe und 4 Monaten später. Wenn Sie also diese Anzahl von Tagen zu dem angegebenen Datum hinzufügen, wird das genaue Datum nach 4 Monaten angezeigt.

Hinweis: Ссылка

    
Orcun Yucel 19.03.2011 15:52
quelle
0

Einfache Lösung:

%Vor%     
Tom 05.08.2015 13:23
quelle
0

Hier ist der Trick:

%Vor%

Viel Spaß!

    
Zolar 21.03.2017 03:30
quelle
-1
%Vor%

Abfrageergebnis

STARTDATE 28.2.2014

MONTHS_TO_ADD 1

ORACLES_ADD_MONTH_RESULT 31.03.2014

ADD_DAYS 28

SUBSTRACT_DAYS 31

NET_DAYS_TO_ADJUST -3

MY_ADD_MONTH_RESULT 3/28/2014

MY_ADD_MONTH_FUNCTION_RESULT 3/28/2014

    
Shaleen Mehta 30.04.2014 19:21
quelle

Tags und Links