MainframeSupports
tip uge 1/2020:

Tro det eller ej, men der er stadig DB2 tabeller eller IMS segmenter eller VSAM filer med datoer gemt i heltalsformatet YYYYMMDD, da det jo er et fuldt ud validt heltal. Det er bare utroligt svært at arbejde med i forhold til, hvis datoen er gemt i en DATE kolonne i DB2. Så gad vide om DB2 på en eller anden måde kan konvertere fra heltalsformatet til et rigtigt DATE format. Umiddelbart er der ingen funktion til dette.

Jeg var egentlig på jagt efter noget andet, da jeg faldt over funktionen TIMESTAMP_FORMAT, som kan konvertere alle mulige datoformater til et timestamp. Datoen til konvertering skal dog være en tegnstreng. Og jeg stod med en integer på formatet YYYYMMDD og skulle have den over i DATE format. Så jeg tænkte, hvad med:

SELECT DATE(TIMESTAMP_FORMAT(CAST 20200101 AS VARCHAR(8)), 'YYYYMMDD'))
FROM SYSIBM.SYSDUMMY1

Og det virkede! Første parameter til TIMESTAMP_FORMAT skal være en VARCHAR(8), og heldigvis kan CAST-funktionen lave alle former for tal i DB2 (integers, decimals, reals) om til tegnstrenge. Anden parameter angiver formatet på tegnstrengen, og her er et væld af muligheder, men jeg skulle jo bare benytte YYYYMMDD. Ud af TIMESTAMP_FORMAT kommer der så et validt timestamp, og med DATE tager jeg så dato-delen af det resulterende timestamp.

Nu er der ikke længere nogen undskyldninger for at bevare datoer som heltal, da de nemt kan laves om til en DB2 DATE. Herefter er livet med datoer bare så meget nemmere.

Forrige danske tip        Last tip in english        Tip oversigten