Accueil du site > Les articles > Gestion des dates avec SQL
Version à imprimer Enregistrer au format PDF

Gestion des dates avec SQL

mardi 17 juin 2008, par David Malle, Didier Encinas Visites  107409 |Popularité : 53%  Première mise en ligne le vendredi 23 janvier 2004.

Quelques astuces de date SQL


Aujourd’hui en SQL

SELECT CURRENT DATE FROM SYSIBM/SYSDUMMY1 Ou SELECT CURDATE() FROM SYSIBM/SYSDUMMY1

Aujourd’hui en SQL, au format YYYYMMDD

SELECT
 YEAR(CURRENT DATE) * 10000 +
 MONTH(CURRENT DATE) * 100  +
 DAY(CURRENT DATE )            
 FROM SYSIBM/SYSDUMMY1      

Hier, demain, la semaine prochaine en SQL

SELECT DATE(DAYS(CURRENT DATE)-1) FROM SYSIBM/SYSDUMMY1
SELECT DATE(DAYS(CURRENT DATE)+1) FROM SYSIBM/SYSDUMMY1
SELECT DATE(DAYS(CURRENT DATE)+7) FROM SYSIBM/SYSDUMMY1

Convertir une date SSAAMMJJ en JJMMSSAA en SQL

Decimal(substring(digits(WDATE), 7, 2)
CONCAT substring(digits(WDATE), 5, 2 )
CONCAT substring(digits(WDATE), 1, 4 ),8 , 0)

Le numéro du jour pour une date donnée

SELECT                
DAY(CURRENT DATE)    
FROM SYSIBM/SYSDUMMY1

Le numéro du mois pour une date donnée

SELECT MONTH('2005-12-21')
FROM SYSIBM/SYSDUMMY1    

Le libellé du mois pour une date donnée

SELECT                  
CASE MONTH(CURRENT DATE)
WHEN  1 THEN 'Janvier'  
WHEN  2 THEN 'Février'  
WHEN  3 THEN 'Mars'  
WHEN  4 THEN 'Avril'  
WHEN  5 THEN 'Mai'  
WHEN  6 THEN 'Juin'  
WHEN  7 THEN 'Juillet'  
WHEN  8 THEN 'Août'  
WHEN  9 THEN 'Septembre'  
WHEN 10 THEN 'Octobre'  
WHEN 11 THEN 'Novembre'  
ELSE         'Décembre'        
END                    
FROM SYSIBM/SYSDUMMY1  

Le libellé du mois pour une date donnée Depuis la V5R3

SELECT                
MONTHNAME(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1  

Le numéro du jour de la semaine pour une date donnée, le lundi étant considéré comme le premier jour de la semaine

SELECT                          
DAYOFWEEK_ISO(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1  

Le numéro du jour de la semaine pour une date donnée, le dimanche étant considéré comme le premier jour de la semaine

SELECT                          
DAYOFWEEK(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1  

Le libellé du jour de la semaine pour une date donnée, en considérant le lundi comme le premier jour de la semaine

SELECT                          
CASE dayofweek_iso(current date)
WHEN 1 THEN 'Lundi'            
WHEN 2 THEN 'Mardi'            
WHEN 3 THEN 'Mercredi'          
WHEN 4 THEN 'Jeudi'            
WHEN 5 THEN 'Vendredi'          
WHEN 6 THEN 'Samedi'            
ELSE        'Dimanche'          
END                            
FROM sysibm/sysdummy1          

Le libellé du jour de la semaine pour une date donnée, en considérant le dimanche comme le premier jour de la semaine

SELECT                          
CASE dayofweek(current date)
WHEN 1 THEN 'Dimanche'
WHEN 2 THEN 'Lundi'            
WHEN 3 THEN 'Mardi'            
WHEN 4 THEN 'Mercredi'          
WHEN 5 THEN 'Jeudi'            
WHEN 6 THEN 'Vendredi'          
ELSE        'Samedi'          
END                            
FROM sysibm/sysdummy1          

Le libellé du jour de la semaine pour une date donnée Depuis la V5R3

SELECT                
DAYNAME(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1  

Obtenir le quantième pour une date donnée

SELECT                  
DAYOFYEAR(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1    

Ajouter à une date des jours, mois ou année pour en calculer une autre

Par exemple, quelle est la date du jour + 2 ans + 3 mois + 5 jours :

SELECT                                  
CURRENT DATE + 2 YEARs + 3 MONTHS + 5 DAYS
FROM SYSIBM/SYSDUMMY1                    

Nombre de jours depuis le 1er janvier de l’an 1

Par exemple la requête suivante donne 1 :

SELECT                
DAYS('0001-01-01')  
FROM SYSIBM/SYSDUMMY1

Par exemple la requête suivante donne 732302 :

SELECT                
DAYS('2005-12-22')  
FROM SYSIBM/SYSDUMMY1

Calculer le nombre de jours calendaires entre deux dates

Par exemple la requête suivante donne 45 jours :

SELECT                                  
DAYS('2005-12-22') - DAYS('2005-11-07')
FROM SYSIBM/SYSDUMMY1                  

Calculer le numéro de la semaine pour une date donnée

Par exemple la requête suivante donne la semaine 50 :

SELECT                      
DAYOFYEAR('2005-12-22') / 7
FROM SYSIBM/SYSDUMMY1      

Utiliser les fonctions dates sur une date stockée au format numérique 8,0

En passant la date au format 8,0 en caractère avec séparateur.

Par exemple la requête suivante extrait le numéro de semaine pour chaque date ’DATE1’ :

SELECT                                        
 DAYOFYEAR(                                    
 SUBSTRING(CHAR(DATE1), 1, 4) CONCAT '-' CONCAT
 SUBSTRING(CHAR(DATE1), 5, 2) CONCAT '-' CONCAT
 SUBSTRING(CHAR(DATE1), 7, 2)                  
 ) / 7                                        
 FROM TABLE1                                  

Calculer le numéro de trimestre d’une date donnée

QUARTER, convertit une date, un timestamp en une valeure entière représentant le trimestre de l’année concernée par la date :

- 1 pour 1er trimestre
- 2 pour 2nd trimestre
- 3 pour 3ème trimestre
- 4 pour 4ème trimestre

SELECT QUARTER('2007-04-11-11.59.20.918664')                          
 FROM SYSIBM/SYSDUMMY1      

Donne comme résultat : 2

SELECT QUARTER                                  
(DATE('2007-04-11-11.59.20.918664') + 4 MONTHS)
 FROM SYSIBM/SYSDUMMY1                        

Donne comme résultat : 3

SELECT quarter(CURRENT DATE) FROM SYSIBM/SYSDUMMY1

Donne comme résultat : 1 pour une date au 19/01/2007