tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
2169
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Ich möchte ein Datum von einem anderen im gleichen record abziehen. Dabei suche ich nach Sätzen, bei denen die Differenz maximal einen Monat beträgt. Beide Datumsfelder sind vom Typ NUMBER(8). Sie enthalten keine völlig kaputten Einträge, inhaltlich gehen sie von 19180101 bis 20991231. Das statement geht so:
    Code :
    1
    2
    3
    
    select feld1, feld2
    from tab
    where (to_date(datumfeld1,'yyyymmdd') - to_date(datumfeld2,'yyyymmdd')) <= 30;
    Wenn ich die Abfrage mit where systemnummer=nnn auf mir bekannte Sätze einschränke, klappt das auch. Das bedeutet, dass die Syntax eigentlich ok ist. Wenn ich die Abfrage aber auf die ganze Tabelle loslasse, erscheint die Fehlermeldung.
    ORA-01839: date not valid for month specified

    Kann das an Schaltjahren oder sowas liegen? Wie klappt die Berechnung über die ganze Tabelle?

    Dank und Gruss
    Marcus
     

  2. #2
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Hatte nichts mit Schaltjahren zu tun. Es gab falsche Daten in den Feldern wie zB 31. November. Die Umrechnung ist an dieser Plausibilitätsprüfung gescheitert. Und logisch: Das eigentliche Problem ist, dass solche Werte entstehen können.
     

  3. #3
    Movera Movera ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hamburg
    Beiträge
    55
    stimmt, die Tabelle enthält einen ungültigen Wert. Baue Dir ein Funktion, etwa so:

    function str_to_date(datum in date) return date is
    testdatum date;
    begin
    begin
    testdatum := datum;
    exception
    when others then testdatum := null;
    end;
    return testdatum;
    end;

    select str_to_date(feld1), str_to_date(feld2)
    from tab
    where (str_to_date(datumfeld1,'yyyymmdd') - str_to_date(datumfeld2,'yyyymmdd')) <= 30;

    so ist die Fehlermeldung weg und die falschen Datensätze findest du dort, wo str_to_date(feld1) oder str_to_date(feld2) null ist
     

Ähnliche Themen

  1. Oracle, PL/SQL Datum zerschneiden
    Von zuckerbrini im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 04.02.09, 12:37
  2. oracle; datum formatieren
    Von binfgi im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 17.08.06, 18:03
  3. Datum Zeit In Oracle Db Eintragen
    Von tobiastt im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 26.08.05, 14:23
  4. Jahr und Tag von Datum abziehen
    Von flotschie im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 08.02.05, 11:44
  5. Tage abziehen vom Datum?! [MySQL]
    Von Blaubmania im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 28.01.05, 11:07