Bonjour,
Je voudrai avoir une requête qui me génère une série de date.
Exemple je veux avoir les dates entre 01/01/2009 et le 05/01/2009
le résultat :
Date
---------
01/01/2009
02/01/2009
03/01/2009
04/01/2009
05/01/2009
Merci
Bonjour,
Je voudrai avoir une requête qui me génère une série de date.
Exemple je veux avoir les dates entre 01/01/2009 et le 05/01/2009
le résultat :
Date
---------
01/01/2009
02/01/2009
03/01/2009
04/01/2009
05/01/2009
Merci
Bonjour,
Au premier essai, je pense à ça (Oracle) :
Mais je pense que peux mieux faire, surtout que tu peux pas générer une aussi grande suite que tu veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 with myT as ( select 1 as col from dual union all select 1 from dual ), myT2 as ( select t1.col from myT t1 full outer join myT t2 on 1=1 ) select to_date('01/01/2009','DD/MM/YYYY') + rownum - 1 as my_date from myT2 t1 full outer join myT2 t2 on 1=1 where rownum <= (to_date('05/01/2009','DD/MM/YYYY') - to_date('01/01/2009','DD/MM/YYYY')) + 1
L'idée serait d'avoir une table qui aurait autant d'élément que la série de date désirée, mais la je sèche...
S'agissant d'un forum SQL et non pas ORACLE, merci de poster des requêtes SQL compatibles !
Cette requête suffit largement :
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 WITH T AS (SELECT CAST('20090101' AS DATE) AS D UNION ALL SELECT D + 1 DAY AS D FROM T WHERE D < '20090105') SELECT * FROM T
Néanmoins, ce n'est pas performant. Mieux vaut avoir une table des dates dans votre base telle que je l'ai indiqué dans cet article :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 D ---------- 2009-01-01 2009-01-02 2009-01-03 2009-01-04 2009-01-05
http://sqlpro.developpez.com/cours/gestiontemps/
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Salut !
Scorpio, c'est toujours un plaisir !
Tu peux faire plus drôle et moins long :
Chuis fan de CONNECT BY !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT to_date('20090101', 'yyyymmdd') + level day FROM Dual CONNECT BY to_date('20090101', 'yyyymmdd') + level <= to_date('20090105', 'yyyymmdd')
Euh... attends... pas d'ORACLE ICI !!!!
(Vous auriez pas un smiley de Pacman qui se fouette lui-même ?)
![]()
Toujours sur la solution propriétaire Oracle / DB2 / PostGres.
Pas besoin d'autant de dates dans le connect by, vous augmentez le paramétrage nécessaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT to_date('20090101', 'yyyymmdd') + level -1 day -- Param date de départ FROM Dual CONNECT BY level <= 5 -- Param durée
Certes Waldar, mais tu dois calculer ton nombre de jours avant appel de la requête...
Est-ce vraiment plus ergonomique que de passer les deux bornes ?
Partager