IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Génération d'une série de Date


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 14
    Par défaut Génération d'une série de Date
    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

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Bonjour,

    Au premier essai, je pense à ça (Oracle) :

    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
    Mais je pense que peux mieux faire, surtout que tu peux pas générer une aussi grande suite que tu veux.
    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...

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    S'agissant d'un forum SQL et non pas ORACLE, merci de poster des requêtes SQL compatibles !

    Cette requête suffit largement :
    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
    Résultat :

    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
    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 :
    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/ * * * * *

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Scorpio, c'est toujours un plaisir !
    Tu peux faire plus drôle et moins long :

    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')
    Chuis fan de CONNECT BY !

    Euh... attends... pas d'ORACLE ICI !!!!

    (Vous auriez pas un smiley de Pacman qui se fouette lui-même ?)

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    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

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    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 ?

Discussions similaires

  1. [XL-2003] Débutant - Traitement d'une série de dates
    Par fanfan89 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/09/2010, 11h45
  2. Problème génération d'une séquence de date
    Par aïtaï_tsubasa dans le forum R
    Réponses: 3
    Dernier message: 03/06/2010, 10h39
  3. Convertir une série de dates en pas de temps
    Par you_go dans le forum Fortran
    Réponses: 7
    Dernier message: 27/07/2009, 16h14
  4. Calcul d'un écart-type sur une série de dates
    Par Emilie MARQUOIS-OGEZ dans le forum Excel
    Réponses: 6
    Dernier message: 30/10/2007, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo