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 TIMESTAMPADD : IBM 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: — Timestamp incorrect ‘2071-10-06 00:00:00.000000′
SELECT TO_DATE(‘711006’,‘YYMMDD’) FROM SYSIBM.SYSDUMMY1;SELECT DATE(TO_DATE(‘711006’,‘YYMMDD’)) FROM SYSIBM.SYSDUMMY1; — Date incorrecte ‘2071-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’,‘ — Timestamp incorrect ‘2071-10-06 00:00:00.000000′ DDMMYY‘) FROM SYSIBM.SYSDUMMY1;SELECT DATE(TO_DATE(‘061071’,‘— Date incorrecte ‘2017-10-06′ DDMMYY‘)) FROM SYSIBM.SYSDUMMY1;
SELECT TO_DATE(‘061071’,‘DDMMRR‘) FROM SYSIBM.SYSDUMMY1; — Timestamp ‘1971-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 incorrecte ‘2071-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 incorrecte ‘2071-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‘), 8) FROM SYSIBM.SYSDUMMY1; — Retourne zone numérique YYYYMMDD
Conversion au format DDMMYYYY :
SELECT DEC(VARCHAR_FORMAT(CURRENT_DATE,‘DDMMYYYY‘), 8) FROM 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‘), 6) FROM SYSIBM.SYSDUMMY1; — Retourne zone numérique YYMMDD
Conversion au format DDMMYYYY :
SELECT DEC(VARCHAR_FORMAT(CURRENT_DATE,‘DDMMYY‘), 6) FROM 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’,‘YYYY‘) FROM SYSIBM.SYSDUMMY1; — Retourne l’année : 2025
SELECT VARCHAR_FORMAT(‘2025-05-03’,‘MM‘) FROM SYSIBM.SYSDUMMY1; — Retourne le mois : 05
SELECT VARCHAR_FORMAT(‘2025-05-03’,‘DD‘) FROM SYSIBM.SYSDUMMY1; — Retourne le jour : 03
SELECT VARCHAR_FORMAT(‘2025-05-03’,‘WW‘) FROM 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’,‘MM‘) FROM SYSIBM.SYSDUMMY1; — Retourne le mois : 05
SELECT TIMESTAMP_FORMAT(‘2025-05-03 09:37:23.123456’,‘DD‘) FROM SYSIBM.SYSDUMMY1; — Retourne le jour : 03
SELECT TIMESTAMP_FORMAT(‘2025-05-03 09:37:23.123456’,‘WW‘) FROM 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.NNNNNN‘) FROM 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 WW‘) FROM 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 W‘) FROM 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 Month‘) FROM 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 Mon‘) FROM 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 Q‘) FROM 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 ddd‘) FROM 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 J‘) FROM 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, 1, 4) CONCAT ‘ années ‘ CONCAT SUBSTR(DUREE, 5, 2) CONCAT ‘ mois ‘ CONCAT SUBSTR(DUREE, 7, 2) CONCAT ‘ 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 jour – Date de naissance
WITH TB_TIMESTAMP AS (SELECT TIMESTAMP(‘1971-10-06-00.00.00.000000’) AS BIRTH_DATE FROM SYSIBM.SYSDUMMY1)
SELECT TIMESTAMPDIFF( 256, CHAR(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 TIMESTAMPDIFF( 4, CHAR(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(16, CHAR(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(32, CHAR(CURRENT_TIMESTAMP – DATE_DEBUT_ANNEE)) FROM TB_DATE; — 32 WEEKS => Retourne 17 semaines