PDA

View Full Version : Datumsproblem



Burkhard
18-05-07, 12:05
Momentan habe ich folgendes Problem:

Gegeben ist jeweils ein Feld in Datei X und Datei Y. Beide sind gepackt definiert 9,0.
Die Datensätze sind über weitere Felder miteinander vernüpft und nur durch den Feldinhalt eindeutig zuzuordnen.

In beiden Feldern ist ein Tagesdatum (Format: YYYYMMDD mit einer führenden 0) gespeichert. Ich muss ein SQL erfinden (und stelle mich dabei wieder einmal zu blöd an) das ermittelt, wie viele Kalendertage zwischen den beiden Daten liegen, bzw. die ermitteln in denen X+1 = Y ist.

Genutzt werden kann ausschließlich SQL mit den Built in Funktionen bis Betriebssystemversion V5R3

Falls jemand eine Idee oder Lösung hat, würde ich mich wie immer sehr freuen, an diesem Wissen zu partizipieren.

Vielen Dank im voraus

Burkhard

Fuerchau
18-05-07, 12:11
1. Umwandeln in ein ISO-Datum:

date(substr(digits(mydate), 1, 4) || '-' || substr(digits(mydate), 5, 2) || '-' || substr(digits(mydate), 7, 2))

Umrechnen in Tage:

days(
date(substr(digits(mydate), 1, 4) || '-' || substr(digits(mydate), 5, 2) || '-' || substr(digits(mydate), 7, 2))
)

Differenz also:

days(
date(substr(digits(mydate), 1, 4) || '-' || substr(digits(mydate), 5, 2) || '-' || substr(digits(mydate), 7, 2))
) - days(
date(substr(digits(mydate2), 1, 4) || '-' || substr(digits(mydate2), 5, 2) || '-' || substr(digits(mydate2), 7, 2))
)

Burkhard
18-05-07, 12:21
So etwas habe ich bereits probiert,

aber ich bekomme z.B. bei der date Ermittlung folgende Ergebnisse


Datum ____ SQL macht daraus
2006/06/27 ++++++++++
2006/06/27 ++++++++++
2010/12/31 0201-01-23
2010/12/31 0201-01-23


Wo liegt das Problem das ich nicht durchblicke?

Ich kann, wenn ich das Ganze mittels cast in DEC(8) umwandele, day, month und year korrekt ermitteln.

Immer noch verwirrt, Tendenz steigend

Burkhard

Pikachu
18-05-07, 12:54
Wie du schreibst sind deine Datumsfelder 9stellig und haben eine führende 0. Ihr Format ist also 0YYYYMMTT. Das Jahr beginnt somit an Stelle 2, der Monat an Stelle 6 und der Tag an Stelle 8. Nimm' also besser:

date(
substr(digits(mydate), 2, 4) || '-' ||
substr(digits(mydate), 6, 2) || '-' ||
substr(digits(mydate), 8, 2))

Burkhard
18-05-07, 13:03
Danke jetzt klappt's !

Wald vor lauter Bäumen nicht mehr gesehen.

Und auch danke für die "-" im Datumsformat.
Das wasste ich mal wieder nicht und dabe es nicht geschafft einen berechenbaren Wert zu ermitteln.

urkhard