fr en

Gestion des formats
DATE TIME TIMESTAMP
SQL sur IBMi

Objectifs :

Présentation des différentes méthodes d’initialisation, de conversion, d’extraction, de calcul et de mise en forme des formats DATE, TIME, TIMESTAMP sous SQL sur IBMi.

Les différents cas présentés ci-dessous ont été réalisés au format *ISO.

Récupération de la date du jour au format DATE :

SELECT CURDATE() FROM SYSIBM.SYSDUMMY1;          — Retourne une DATE au format YYYY-MM-DD
SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1;  — Retourne une DATE au format YYYY-MM-DD

Récupération de l'heure actuelle au format TIME :

SELECT CURRENT_TIME FROM SYSIBM.SYSDUMMY1;  — Retourne un TIME au format hh.mm.ss
SELECT CURTIME() FROM SYSIBM.SYSDUMMY1;          — Retourne un TIME au format hh.mm.ss

Récupération de la date et heure actuelle au format TIMESTAMP :

SELECT CURRENT_TIMESTAMP FROM SYSIBM.SYSDUMMY1;     — Retourne un TIMESTAMP au format YYYY-MM-DD hh:mm:ss.xxxxxx
SELECT NOW() FROM SYSIBM.SYSDUMMY1;                                — Retourne un TIMESTAMP au format YYYY-MM-DD hh:mm:ss.xxxxxx

Ajout ou soustraction d'une durée à une date :

SELECT CURRENT_DATE – 2 MONTHS FROM SYSIBM.SYSDUMMY1;   — Retourne la date du jour – 2 mois au format YYYY-MM-DD
SELECT CURRENT_DATE + 1 DAYS FROM SYSIBM.SYSDUMMY1;         — Retourne la date du jour + 1 jour au format YYYY-MM-DD
SELECT DATE(‘2025-10-06’+ 1 YEARS FROM SYSIBM.SYSDUMMY1;   — Retourne la date 2025-10-06 + 1 an  = 2026-10-06

Ajout ou soustraction d'une durée à une heure :

SELECT CURRENT_TIME + 1 HOURS FROM SYSIBM.SYSDUMMY1;        — Retourne l’heure actuelle + 1 Heure au format hh.mm.ss
SELECT CURRENT_TIME – 15 MINUTES FROM SYSIBM.SYSDUMMY1;    — Retourne l’heure actuelle – 15 minutes au format hh.mm.ss
SELECT CURRENT_TIME + 55 SECONDS FROM SYSIBM.SYSDUMMY1;   — Retourne l’heure actuelle + 55 secondes au format hh.mm.ss

Ajout ou soustraction d'une durée à un timestamp :

— Les instructions suivantes retournent un TIMESTAMP au format YYYY-MM-DD hh:mm:ss.xxxxxx
SELECT
 CURRENT_TIMESTAMP – 2 MONTHS FROM SYSIBM.SYSDUMMY1;                            — Retourne la date du jour – 2 mois
SELECT CURRENT_TIMESTAMP + 1 DAYS FROM SYSIBM.SYSDUMMY1;                                  — Retourne la date du jour + 1 jour
SELECT TIMESTAMP(‘2025-10-06 15:15:53.123456’+ 1 YEARS FROM SYSIBM.SYSDUMMY1;  — Retourne 2026-10-06 15:15:53.123456
SELECT CURRENT_TIMESTAMP + 1 HOURS FROM SYSIBM.SYSDUMMY1;                              — Retourne la date du jour + 1 heure
SELECT CURRENT_TIMESTAMP – 25 MINUTES FROM SYSIBM.SYSDUMMY1;                         — Retourne la date du jour – 25 minutes
SELECT CURRENT_TIMESTAMP + 30 SECONDS FROM SYSIBM.SYSDUMMY1;                        — Retourne la date du jour + 30 secondes

Une autre façon de faire est d’utiliser la fonction SQL TIMESTAMPADDIBM scalar function TIMESTAMPADD

Conversion d'une chaine de 8 caractères au format DATE :

SELECT DATE(‘2025-05-03’) FROM SYSIBM.SYSDUMMY1;                                      — Retourne un champ DATE initialisé à ‘2025-05-03’

SELECT DATE(‘1971-10-06’) FROM SYSIBM.SYSDUMMY1;                                      — Retourne un champ DATE initialisé à ‘1971-10-06’
SELECT TO_DATE(‘19711006’,‘YYYYMMDD’) FROM SYSIBM.SYSDUMMY1;             — Retourne un TIMESTAMP initialisé à ‘1971-10-06 00:00:00.000000’
SELECT DATE(TO_DATE(‘06101971’,‘DDMMYYYY’)) FROM SYSIBM.SYSDUMMY1; — Retourne champ DATE initialisé à ‘1971-10-06’

Conversion d'une chaine de 6 caractères au format DATE :

Si la chaine de caractères à convertir est au format YYMMDD:
SELECT
 TO_DATE(‘711006’,YYMMDD’) FROM SYSIBM.SYSDUMMY1;
             — Timestamp incorrect2071-10-06 00:00:00.000000′     
SELECT DATE(TO_DATE(‘711006’,YYMMDD’)) FROM SYSIBM.SYSDUMMY1;  — Date incorrecte2071-10-06′ 
SELECT TO_DATE(‘711006’,RRMMDD’) FROM SYSIBM.SYSDUMMY1;             — Timestamp ‘1971-10-06 00:00:00.000000′   
SELECT DATE(TO_DATE(‘711006’,RRMMDD’)) FROM SYSIBM.SYSDUMMY1;  — Date ‘1971-10-06′

Si la chaine de caractères à convertir est au format DDMMYY:
SELECT TO_DATE(‘061071’,DDMMYY) FROM SYSIBM.SYSDUMMY1;
             — Timestamp incorrect2071-10-06 00:00:00.000000′ 
SELECT DATE(TO_DATE(‘061071’,DDMMYY)) FROM SYSIBM.SYSDUMMY1; 
— Date incorrecte2017-10-06′ 
SELECT TO_DATE(‘061071’,‘DDMMRR) FROM SYSIBM.SYSDUMMY1;             
— Timestamp1971-10-06 00:00:00.000000′   
SELECT DATE(TO_DATE(‘061071’,‘DDMMRR)) FROM SYSIBM.SYSDUMMY1; 
— Date ‘1971-10-06′

Conversion d'une chaine de caractères en champ TIME :

SELECT TIME(’13:48:35′) FROM SYSIBM.SYSDUMMY1;       — Retourne un champ TIME initialisé à ‘13.48.35’
SELECT TIME(’13.48.35′) FROM SYSIBM.SYSDUMMY1;       — Retourne un champ TIME initialisé à ‘13.48.35’

Conversion d'une chaine de caractère en champ TIMESTAMP :

SELECT TIMESTAMP(‘2025-05-03-13.48.35.123456’) FROM SYSIBM.SYSDUMMY1; Retourne un TIMESTAMP initialisé à ‘2025-05-03 13:48:35.123456’

Avec une première chaine de caractères contenant la date et une seconde chaine de caractères contenant l’heure :
SELECT
 TIMESTAMP(‘2025-05-03’‘13.48.35’) FROM SYSIBM.SYSDUMMY1; Retourne un TIMESTAMP initialisé à ‘2025-05-03 13:48:35.000000’

Conversion d'un champ DATE en caractères :

SELECT CHAR(CURRENT_DATE) FROM SYSIBM.SYSDUMMY1;                          — Retourne ‘YYYY-MM-DD’
SELECT CHAR(CURDATE()) FROM SYSIBM.SYSDUMMY1;                                  — Retourne ‘YYYY-MM-DD’
SELECT TO_CHAR(CURRENT_DATE) FROM SYSIBM.SYSDUMMY1;                    — Retourne ‘YYYY-MM-SS-00.00.00
SELECT TO_CHAR(NOW()) FROM SYSIBM.SYSDUMMY1;                                   — Retourne ‘YYYY-MM-SS-hh.mm.ss.xxxxxx’

Conversion avec mise en forme par VARCHAR_FORMAT(champ_à_convertir, format_de_conversion):

SELECT VARCHAR_FORMAT(CURRENT_DATE,DD/MM/YYYY) FROM SYSIBM.SYSDUMMY1;         — Retourne ‘DD/MM/YYYY’
SELECT VARCHAR_FORMAT(NOW(),DD/MM/YYYY) FROM SYSIBM.SYSDUMMY1;                        — Retourne ‘DD/MM/YYYY’
SELECT VARCHAR_FORMAT(NOW(),DD/MM/YYYY hh:mm:ss) FROM SYSIBM.SYSDUMMY1;       — Retourne ‘DD/MM/YYYY hh:mm:ss’ 

Conversion d'un champ numérique 6 dont 0 au format TIME :

SELECT TIME(TIMESTAMP_FORMAT(‘153515’‘HH24MISS’)) FROM SYSIBM.SYSDUMMY1;     — Retourne 15.35.15

Conversion d'un champ numérique 6 dont 0 au format DATE :

Si la valeur numérique à convertir est au format YYMMDD :
SELECT DATE(TIMESTAMP_FORMAT(CHAR(240131),YYMMDD’)) FROM SYSIBM.SYSDUMMY1;     — Retourne DATE ‘2024-01-31′
SELECT DATE(TIMESTAMP_FORMAT(CHAR(710131),YYMMDD’)) FROM SYSIBM.SYSDUMMY1;     — Retourne DATE incorrecte2071-01-31′  
SELECT DATE(TIMESTAMP_FORMAT(CHAR(710131),RRMMDD’)) FROM SYSIBM.SYSDUMMY1;     — Retourne DATE ‘1971-01-31′
SELECT DATE(TIMESTAMP_FORMAT(CHAR(240131),RRMMDD’)) FROM SYSIBM.SYSDUMMY1;     — Retourne DATE ‘2024-01-31′

Si la valeur numérique à convertir est au format DDMMYY :
SELECT DATE(TIMESTAMP_FORMAT(LPAD(TRIM(CHAR(061071)), 6‘0’),‘DDMMYY)) FROM SYSIBM.SYSDUMMY1;  — DATE incorrecte2071-10-06′
SELECT DATE(TIMESTAMP_FORMAT(LPAD(TRIM(CHAR(061071)), 6‘0’),‘DDMMRR)) FROM SYSIBM.SYSDUMMY1;  — Retourne DATE ‘1971-10-06′

Conversion d'un champ numérique 8 dont 0 au format DATE :

Si la valeur numérique à convertir est au format YYYYMMDD :
SELECT TO_DATE(CHAR(19711006),‘YYYYMMDD’FROM SYSIBM.SYSDUMMY1;                — Retourne TIMESTAMP ‘1971-10-06 00:00:00.000000’
SELECT DATE(TO_DATE(CHAR(19711006),‘YYYYMMDD’)) FROM SYSIBM.SYSDUMMY1;      — Retourne DATE ‘1971-10-06’

Si la valeur numérique à convertir est au format DDMMYYYY :
SELECT DATE(TIMESTAMP_FORMAT(LPAD(TRIM(CHAR(06101971)), 8‘0’),‘DDMMYYYY’)) FROM SYSIBM.SYSDUMMY1; Retourne DATE ‘1971-10-06’

Conversion d'une Date en champ numérique 8 dont 0 :

Conversion au format YYYYMMDD :
SELECT DEC(VARCHAR_FORMAT(CURRENT_DATE,YYYYMMDD), 8FROM SYSIBM.SYSDUMMY1;   — Retourne zone numérique YYYYMMDD

Conversion au format DDMMYYYY :
SELECT DEC(VARCHAR_FORMAT(CURRENT_DATE,DDMMYYYY), 8FROM SYSIBM.SYSDUMMY1;  — Retourne zone numérique DDMMYYYY

Conversion d'une Date en champ numérique 6 dont 0 :

Conversion au format YYMMDD :
SELECT DEC(VARCHAR_FORMAT(CURRENT_DATE,YYMMDD), 6FROM SYSIBM.SYSDUMMY1;   — Retourne zone numérique YYMMDD

Conversion au format DDMMYYYY :
SELECT DEC(VARCHAR_FORMAT(CURRENT_DATE,DDMMYY), 6FROM SYSIBM.SYSDUMMY1;  — Retourne zone numérique DDMMYY

Extraction des données à partir d'un champ DATE :

SELECT YEAR(‘2025-05-03’FROM SYSIBM.SYSDUMMY1;                               — Retourne l’année :  2025
SELECT QUARTER(‘2025-05-03’FROM SYSIBM.SYSDUMMY1;                        — Retourne le trimestre : 2
SELECT MONTH(‘2025-05-03’FROM SYSIBM.SYSDUMMY1;                          — Retourne le mois : 05
SELECT DAY(‘2025-05-03’FROM SYSIBM.SYSDUMMY1;                                 — Retourne le jour 03
SELECT WEEK(‘2025-05-03’FROM SYSIBM.SYSDUMMY1;                              — Retourne le numéro de semaine : 18

Autre méthode avec la fonction scalaire VARCHAR_FORMAT :
SELECT VARCHAR_FORMAT(‘2025-05-03’,YYYYFROM SYSIBM.SYSDUMMY1;  — Retourne l’année : 2025
SELECT VARCHAR_FORMAT(‘2025-05-03’,MMFROM SYSIBM.SYSDUMMY1;    — Retourne le mois : 05
SELECT VARCHAR_FORMAT(‘2025-05-03’,DDFROM SYSIBM.SYSDUMMY1;      — Retourne le jour : 03
SELECT VARCHAR_FORMAT(‘2025-05-03’,WWFROM SYSIBM.SYSDUMMY1;    — Retourne le numéro de semaine : 18

Extraction des données à partir d'un TIMESTAMP :

SELECT YEAR(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;                   — Retourne l’année : 2025
SELECT MONTH(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;              — Retourne le mois : 05
SELECT DAY(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;                     — Retourne le jour : 03
SELECT WEEK(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;                  — Retourne le numéro de semaine : 18
SELECT HOUR(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;                  — Retourne les heures : 09
SELECT MINUTE(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;              — Retourne les minutes : 37
SELECT SECOND(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;              — Retourne les secondes : 23
SELECT MICROSECOND(‘2025-05-03 09:37:23.123456’FROM SYSIBM.SYSDUMMY1;  — Retourne les microsecondes 123456

Autre méthode avec la fonction scalaire TIMESTAMP_FORMAT
SELECT TIMESTAMP_FORMAT(‘2025-05-03 09:37:23.123456’,MMFROM SYSIBM.SYSDUMMY1; — Retourne le mois : 05
SELECT TIMESTAMP_FORMAT(‘2025-05-03 09:37:23.123456’,DDFROM SYSIBM.SYSDUMMY1;  — Retourne le jour : 03
SELECT TIMESTAMP_FORMAT(‘2025-05-03 09:37:23.123456’,WWFROM SYSIBM.SYSDUMMY1; — Retourne le numéro de semaine : 18 

Extraction du premier jour du mois :

SELECT FIRST_DAY(‘2025-10-06’) FROM SYSIBM.SYSDUMMY1;   –Retourne la date du premier jour du mois : ‘2025-10-01’

Extraction du dernier jour du mois :

SELECT LAST_DAY(‘2025-01-06’) FROM SYSIBM.SYSDUMMY1;  –Retourne la date du dernier jour du mois : ‘2025-01-31’;
SELECT LAST_DAY(‘2025-02-06’) FROM SYSIBM.SYSDUMMY1;  –Retourne la date du dernier jour du mois : ‘2025-02-28’

Extraction du mois en caractères :

SELECT MONTHNAME(CURRENT_DATE) FROM SYSIBM.SYSDUMMY1;              — Retourne le mois de la DATE en caractères alphanumériques
SELECT MONTHNAME(CURRENT_TIMESTAMP) FROM SYSIBM.SYSDUMMY1;  — Retourne le mois du TIMESTAMP en caractères alphanumériques

Exemple :
SELECT MONTHNAME(‘2025-10-06’) FROM SYSIBM.SYSDUMMY1;                     Retourne ‘Octobre’

Mise en forme d'un TIMESTAMP ou d'une DATE :

Les fonctions TIMESTAMP_FORMAT et VARCHAR_FORMAT permettent de mettre en forme les données extraites des DATE et TIMESTAMP.
Le premier paramètre à transmettre à la fonction est la valeur à mettre en forme.
Le second paramètres passé lors de l’appel de ces fonctions défini le format de sortie attendu.

Les principales données extractibles sont les suivantes :

  • Le jour : DD
  • Le mois : MM
  • L’année : YYYY ou YY
  • Les heures : HH , HH12 (sur 12 heures) ou HH24 (sur 24 heures)
  • L’information Avant ou après MIDI : AM, PM
  • Les minutes : MI
  • Les secondes : SS
  • Les microsecondes : NNNNNN
  • Le numéro de la semaine : WW
  • Le numéro de la semaine dans le mois : W
  • Le jour de la semaine : D (1 = Dimanche / 2 = lundi / 3 = mardi …)
  • Le mois en caractères : MONTH ou Month ou month en fonction de la casse attendue.
  • Le diminutif du mois sur 3 caractères : MON ou Mon ou mon en fonction de la casse attendue.
  • Le trimestre : Q
  • Le numéro de jour de l’année : ddd
  • Le numéro de jour par rapport au calendrier Julien : J

Les séparateurs de données extraites utilisables sont :

  • Le tiret : ‘
  • Le point : ‘.
  • Le slash : ‘/
  • La virgule ‘,
  • Le point virgule : ‘;
  • Les 2 points : ‘:
  • Et le caractère blanc : ‘ ‘

Exemples :

— Jour DD / mois MM / année YYYY / heures HH / minutes MI / secondes SS / microsecondes NNNNNN
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,DD/MM/YYYY HH.MI.SS.NNNNNNFROM TB_TIMESTAMP; — 03/05/2025 06.35.15.123456

— Heure sur 12 HH12
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,HH12.MI.SS’FROM TB_TIMESTAMP; — 06.35.15.123456

— Heure sur 24 HH24 ou HH
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,HH24.MI.SS.NNNNNN’FROM TB_TIMESTAMP; — 18.35.15.123456

— Information ‘Avant midi’ ou ‘Après midi’ : AM ou PM
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘HHAM.MI.SS.NNNNNN’FROM TB_TIMESTAMP; 06PM.35.15.123456
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘HHPM.MI.SS.NNNNNN’FROM TB_TIMESTAMP; — 06PM.35.15.123456

— Numéro Semaine de l’année WW
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘DD/MM/YYYY WWFROM TB_TIMESTAMP; — 03/05/2025 18 

— Numéro Semaine du mois W
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘DD/MM/YYYY WFROM TB_TIMESTAMP; — 03/05/2025 1

— Jour de la semaine D ( Rappel : 1 = Dimanche)
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘DD/MM/YYYY D’FROM TB_TIMESTAMP; — 03/05/2025 7

— Mois en caractères MONTH  ou month ou Month 
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-09-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,MONTH month MonthFROM TB_TIMESTAMP; — SEPTEMBRE septembre Septembre

— Mois sur 3 caractères MON ou mon ou Mon 
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-09-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,MON mon MonFROM TB_TIMESTAMP; — SEP sep Sep

— Trimestre Q
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘DD/MM/YYYY QFROM TB_TIMESTAMP; — 03/05/2025 2

— Jour de l’année ddd
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-05-03 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘DD/MM/YYYY dddFROM TB_TIMESTAMP; — 03/05/2025 123

— Jour Calendrier Julien J
WITH TB_TIMESTAMP AS(SELECT TIMESTAMP(‘2025-01-05 18:35:15.123456’AS TIMESTAMP_REF FROM SYSIBM.SYSDUMMY1)
SELECT VARCHAR_FORMAT(TIMESTAMP_REF,‘DD/MM/YYYY JFROM TB_TIMESTAMP; — 05/01/2025 2460681

Calcul de l'intervalle de temps séparant 2 dates :

La soustraction d’une date à une autre retourne l’intervalle de temps séparant ces 2 dates sous la forme d’un décimal de 8 caractères.

  • Les 4 premiers caractères représentent le nombre d’années séparant les 2 dates.
  • Les 2 caractères suivants représentent le nombre de mois séparant les 2 dates.
  • Les 2 derniers caractères représentent le nombre de jours séparant les 2 dates.

SELECT DATE(‘2025-10-06’ DATE(‘2025-10-02’FROM SYSIBM.SYSDUMMY1;           — Retourne 4           => 4 jours 
SELECT DATE(‘2025-10-06’ DATE(‘2024-10-07’FROM SYSIBM.SYSDUMMY1;           — Retourne 1130     => 11 mois et 30 jours
SELECT DATE(‘2025-10-06’ DATE(‘1971-10-06’FROM SYSIBM.SYSDUMMY1;           — Retourne 540000 => 54 ans 0 mois 0 jours

WITH TB_DATES AS (SELECT DATE(‘1971-10-06’AS DATE_DEBUT, DATE(‘2025-05-01’AS DATE_FIN FROM SYSIBM.SYSDUMMY1),
TB_DUREE AS (SELECT DIGITS(DATE_FIN – DATE_DEBUT) AS DUREE FROM TB_DATES)
SELECT DUREE, SUBSTR(DUREE, 14CONCAT ‘ années ‘ CONCAT SUBSTR(DUREE, 52CONCAT ‘ mois ‘ CONCAT SUBSTR(DUREE, 72CONCAT ‘ jours’ AS DUREE_TEXTE
FROM TB_DUREE;                                                                                                            — Retourne : ‘00530626’  ‘0053 années 06 mois 26 jours’

Calcul de l'intervalle de temps séparant 2 TIMESTAMP :

L’intervalle de temps séparant 2 TIMESTAMP se calcule avec la fonction scalaire TIMESTAMPDIFF.
Cette fonction attend 2 paramètres en entré :

  • Le code correspondant à l’unité de calcul de l’intervalle.
    Les codes des unités utilisables sont les suivants :
    • 1 : Microsecondes
    • 2 : Secondes
    • 4 : Minutes
    • 8 : Heures
    • 16 : Jours
    • 32 : Semaines
    • 64 : Mois
    • 128 : Trimestres
    • 256 : Années
  • La chaine de caractère correspondant à la soustraction des 2 TIMESTAMP.
    Pour ne pas avoir de résultat négatif il faut soustraire le TIMESTAMP le plus récent au TIMESTAMP le plus vieux : TIMESTAMP-FIN – TIMESTAMP_DEBUT.

Exemples :

— Calcul de l’âge en année (code unité 256) : Date du jourDate de naissance
WITH TB_TIMESTAMP AS (SELECT TIMESTAMP(‘1971-10-06-00.00.00.000000’AS BIRTH_DATE FROM SYSIBM.SYSDUMMY1)
SELECT TIMESTAMPDIFF256CHAR(CURRENT_TIMESTAMP – BIRTH_DATE)) FROM TB_TIMESTAMP; — Unité 256 YEARS => Retourne 53 ans 

— Calcul de l’intervalle entre l’heure actuelle et l’heure actuelle – 45 minutes en minutes (code unité 4) :
WITH TB_TIMESTAMP AS (SELECT CURRENT_TIMESTAMP – 45 MINUTES AS HEURE_DEBUT FROM SYSIBM.SYSDUMMY1)
SELECT TIMESTAMPDIFF4CHAR(CURRENT_TIMESTAMP – HEURE_DEBUT)) FROM TB_TIMESTAMP; — Unité 4 MINUTES => Retourne 45 minutes

— Calcul de l’intervalle entre la date du jour et la date de début d’année en jours (code unité 16) :
WITH TB_DATE AS (SELECT TIMESTAMP(‘2025-01-01’AS DATE_DEBUT_ANNEE FROM SYSIBM.SYSDUMMY1)
SELECT TIMESTAMPDIFF(16CHAR(CURRENT_TIMESTAMP – DATE_DEBUT_ANNEE)) FROM TB_DATE; — Unité 16 DAYS => Retourne 122 jours

— Calcul de l’intervalle entre la hdate du jour et la date de début d’année en semaines (code unité 32) :
WITH TB_DATE AS (SELECT TIMESTAMP(‘2025-01-01’AS DATE_DEBUT_ANNEE FROM SYSIBM.SYSDUMMY1)
SELECT TIMESTAMPDIFF(32CHAR(CURRENT_TIMESTAMP – DATE_DEBUT_ANNEE)) FROM TB_DATE; 32 WEEKS => Retourne 17 semaines