Guten Morgen,
in der Firma in der ich aktuell arbeite werden viele Datumsfelder als sammlung von decimals behandelt. Da dadurch häufig eine Konvertierung beim zugriff auf die DB2 notwendig ist habe ich eine UDF geschrieben.
Code:
-- Konvertiert 3 Zahlen zu einem Datum
create or replace function dateConverter(day decimal(2, 0), month decimal(2, 0), year decimal(4, 0)) returns date
language sql
fenced
deterministic
returns null on null input
no external action
not secured
set option datFmt = *ISO
begin
declare returnValue date default '1940-01-01';
-- on conversion error
declare continue handler for sqlstate '22007'
return null;
set returnValue = date(digits(year) || '-' || digits(month) || '-' || digits(day));
return returnValue;
end;
Die Funktion arbeitet grundsätzlich korrekt, jedoch ist sie nur in der Lage Daten vom 1940-01-01 - 2039-12-31 umzuwandeln. Nach einiger Recherche habe ich herausgefunden das bei verwendung des ISO-Datumsformat daten zwischen dem 0001-01-01 - 9999-12-31 verwendet werden können. Mein Ansatz war jetzt die sql option datFmt zu setzen. Das Ergebnis ist jedoch nicht zufriedenstellend, da bei enem Datum größer 2039-12-31 immer noch NULL ausgegeben wird. Habe ich etwas vergessen?
Vielen Dank für Ihre Hilfe.
Gruß x00
Bookmarks