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

Contribuez Discussion :

[FAQ] générer une liste de dates avec une simple requête


Sujet :

Contribuez

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut [FAQ] générer une liste de dates avec une simple requête
    Bonjour

    Adapté d'une idée de Tofalu utilisée dans un défi, je propose le code suivant pour générer les dates entre le 01/01/2008 (par exemple) et aujourd'hui, sans table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  DATESERIAL(2008+ID1, ID2+1, ID3+1) AS LADATE FROM
    (SELECT TOP 5 (SELECT Count(ID) as a FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID1 FROM MSysObjects TA1 ORDER BY ID) T1 ,  
    (SELECT TOP 12 (SELECT Count(ID)  FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID2 FROM MSysObjects TA1 ORDER BY ID) T2,
    (SELECT TOP 31 (SELECT Count(ID)  FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID3 FROM MSysObjects TA1 ORDER BY ID) T3
    WHERE DATESERIAL(2008+ID1, ID2, ID3)<=date()
    ORDER BY DATESERIAL(2008+ID1, ID2, ID3)

  2. #2
    Invité
    Invité(e)
    Par défaut


    Joli

  3. #3
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Effectivement, excellente contribution !

    Bravo.

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Tout d'abord félicitations pour cette idée ingénieuse qui consiste à s'affranchir d'une table d'indices en utilisant une table système déjà présente dans la base.

    Mais aussi bravo pour la mise en place de la requête à partir de l'identifiant de cette table.

    Toutefois, il me semble qu'il faut au moins 31 enregistrements dans la table système, tu me diras que ce n'est pas réellement un problème.

    Par contre, il faut mettre un distinct dans la requête pour générer des dates uniques pour le calendrier.

    Je m'explique :

    Supposons que nous soyons le 29/03/2012 et prenons le 29 février 2012, généré dans la requête avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(2012,2,29) => "29/02/2012"  OK
    Maintenant la date suivante générée est avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(2012,2,30) => "01/03/2012"
    La suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(2012,2,31) => "02/03/2012"
    puis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(2012,3,1) => "01/03/2012"
    on a généré 2 fois le "01/03/2012"

    Voici donc ta requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT  DATESERIAL(2008+ID1, ID2+1, ID3+1) AS LADATE FROM
    (SELECT TOP 5 (SELECT Count(ID) as a FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID1 FROM MSysObjects TA1 ORDER BY ID) T1 ,  
    (SELECT TOP 12 (SELECT Count(ID)  FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID2 FROM MSysObjects TA1 ORDER BY ID) T2,
    (SELECT TOP 31 (SELECT Count(ID)  FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID3 FROM MSysObjects TA1 ORDER BY ID) T3
    WHERE DATESERIAL(2008+ID1, ID2+1, ID3+1)<=date()
    ORDER BY DATESERIAL(2008+ID1, ID2+1, ID3+1)

    Encore bravo !

  5. #5
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Enfer et damnation ! Très bien vu !

  6. #6
    Membre régulier

    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2015
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 130
    Points : 87
    Points
    87
    Billets dans le blog
    1
    Par défaut
    Pouvez vous nous décris les étapes à suivre et ou mettre ce code??
    Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Il faut copier le code SQL dans l"éditeur SQL :

    Création de requête -> Mode SQL.

    et copier le code dans l'éditeur...et enregistrer la requête.

    Cdlt,

  8. #8
    Membre régulier

    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2015
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 130
    Points : 87
    Points
    87
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par User Voir le message
    Bonjour,

    Il faut copier le code SQL dans l"éditeur SQL :

    Création de requête -> Mode SQL.

    et copier le code dans l'éditeur...et enregistrer la requête.

    Cdlt,
    sa marche bien, merci
    mais à quoi sert??
    crdlt,

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par karima123 Voir le message
    sa marche bien, merci
    mais à quoi sert??
    crdlt,
    L'idée c'est de générer un calendrier, sans avoir besoin de sauvegarder les dates dans une table.

    Après, il faut aussi bien choisir l'année de démarrage de l'affichage.

    Cdlt,

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je croyais que c'était le forum pour développeur pro ou souhaitant le devenir et non le forum du petit bidouilleur du dimanche...
    Et en plus ça rentre dans la faq "Dignus est intrare" !

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par galoir Voir le message
    Je croyais que c'était le forum pour développeur pro ou souhaitant le devenir et non le forum du petit bidouilleur du dimanche...
    Et en plus ça rentre dans la faq "Dignus est intrare" !
    C'est vrai qu'au bout du compte il y a quand même beaucoup de gadgets, mais heureusement pas que ça

Discussions similaires

  1. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  2. [AC-2010] Filtrer les enregistrements par date avec une liste déroulante
    Par sardaucar dans le forum IHM
    Réponses: 7
    Dernier message: 19/11/2013, 19h13
  3. [AC-2003] Probleme de date avec une liste deroulante:
    Par Bonero dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/06/2011, 21h30
  4. [MySQL] Afficher une liste de livres avec une rupture par auteur
    Par Ericx_25 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/03/2007, 22h02
  5. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46

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