MainframeSupports
tip uge 37/2019:

Beregninger på timestamps er et helt kapitel for sig i SQL. Man kan lægge tidsenheder til og trække dem fra i en grad, der ikke er tilgængelig i programmeringssprog. Det er et kæmpe emne, som jeg ikke vil komme ind på her. Jeg vil i stedet dykke ned i et lille hjørne, nemlig afstanden mellem to timestamps. Essensen er at beregne, hvor lang tid der er gået mellem to tidspunkter.

DB2 tilbyder simpel subtraktion af to timestamps, TS1 - TS2, men resultatet er ikke et nyt timestamp, men i stedet en DECIMAL, hvor heltalsdelen er 14 cifre i formatet YYYYMMDDHHMMSS og decimaldelen er antallet af mikrosekunder (hvis default er benyttet). Desværre er dette format ret ubrugeligt at regne videre på. Det har brugerne af SQL i DB2 for længst klaget over, og IBMs svar er funktionen TIMESTAMPDIFF. Med denne funktion kan du få returneret tidsforskellen mellem to timestamps i lige den enhed, du gerne vil have. Til gengæld må du leve med et vist tab af præcision i den tidsforskel, der returneres, av, av, av.

Det er første gang, jeg har oplevet at få forkerte resultater returneret af DB2. Dermed sagt, at du nøje skal overveje, om du kan bruge TIMESTAMPDIFF til dit formål, eller om du hellere skal kaste dig ud i at decifrere resultatet af en simpel subtraktion. Jg har anvendt TIMESTAMPDIFF til at finde forskellen i minutter mellem to timestamps, der typisk er inden for samme døgn, og her virker funktionen perfekt. Hvis det er noget med at beregne en afstand i dage, så vil jeg i stedet anbefale, at du anvender funktionen DAYS. Udtrykket DAYS(TS1) - DAYS(TS2) vil give dig det præcise antal dage mellem TS1 og TS2.

Forrige danske tip        Last tip in english        Tip oversigten