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 :

Trier une date par ordre chronologique


Sujet :

Langage SQL

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut Trier une date par ordre chronologique
    Bonjour,
    Avant de poster cette requête, j'ai fais le tour du forum pour essayer de trouver une solution à mon problème mais en vain.
    J'ai une requête sql qui me donne plusieurs enregistrement dont celui de jour en format jj/mm/aaaa.
    Lorsque je souhaite trier ce champ par ordre chronologique, le tri se fait seulement sur le premier chiffre du jour.

    Ci dessous ma requête sql épurée et la résulat obtenu sur le champ jour.
    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
    convert (  char(10),  (DATEADD(hour, -(9/2), table1.DateTime) ) ,103 ) as Jour,
    ---------
     
     Group By
     convert (  char(10),  (DATEADD(hour, -(9/2), table1.DateTime) ) ,103 ),
     -----
     
     Order by
    jour
    Nom : jour.PNG
Affichages : 3969
Taille : 5,3 Ko

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 822
    Points
    30 822
    Par défaut
    Pour trier des dates par ordre chronologique, il faut et il suffit que celles-ci soit de type DATE.
    En convertissant les dates en type CHAR, celles-ci sont normalement triées par ordre alphabétique.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 817
    Points
    17 817
    Par défaut
    En complément de la réponse d'al1_24, vous pouvez essayer le format 121 (AAAA-MM-JJ) dans votre convert qui permet de trier une date même si c'est une chaîne de caractères.
    Si vous avez vraiment besoin de l'affichage en JJ/MM/AAAA, faites comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      select convert(char(10), cast(DATEADD(hour, -(9/2), table1.DateTime) as date), 103) as Jour
    ...
    group by cast(DATEADD(hour, -(9/2), table1.DateTime) as date)
    ... 
    order by cast(DATEADD(hour, -(9/2), table1.DateTime) as date)
    go

  4. #4
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour
    Avant tout, merci pour vos réponses

    al1_24, votre ligne de code avec date fonctionne trés bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    convert (  date,  (DATEADD(hour, -(9/2), table1.DateTime) ) ,103 ) as jour,
    mais le résulat s'affiche ainsi
    2017-05-02
    alors que je souhaiterais ceci 02/05/2017


    Waldar,
    Vos lignes de codes ne fonctionnent pas
    j'ai toujours le résultat qui s'affiche avec un tri seulement sur le premier chiffre du jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select convert(char(10), cast(DATEADD(hour, -(9/2), table1.DateTime) as date), 103) as Jour
    ...
    group by cast(DATEADD(hour, -(9/2), table1.DateTime) as date)
    ... 
    order by cast(DATEADD(hour, -(9/2), table1.DateTime) as date)

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    oups désolé Waldar,
    tout fonctionne à merveille.
    J'avais fais une erreur de frappe

    je vais adopter la ;solution de Waldar..
    merci encore pour votre aide à tous les deux

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 817
    Points
    17 817
    Par défaut
    J'attire aussi votre attention sur le fait que la fonction DATEADD travaille avec des entiers en deuxième argument. Votre -9/2 va être arrondi à -4.
    Si vous voulez retrancher 4h30, il faut faire utiliser deux fois la fonction DATEADD : une pour les heures et une autre pour les minutes.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2013
    Messages : 17
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Waldar Voir le message
    J'attire aussi votre attention sur le fait que la fonction DATEADD travaille avec des entiers en deuxième argument. Votre -9/2 va être arrondi à -4.
    Si vous voulez retrancher 4h30, il faut faire utiliser deux fois la fonction DATEADD : une pour les heures et une autre pour les minutes.
    un seul DATEADD de -270 minutes sera plus simple ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Trier par ordre chronologique une colonne d'un TCD contenant des dates en VBA
    Par boostiik dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/04/2017, 19h17
  2. Réponses: 4
    Dernier message: 25/02/2013, 11h41
  3. Trier une Grille par ordre croissant ou décroissant
    Par nurah dans le forum Composants VCL
    Réponses: 6
    Dernier message: 13/02/2013, 12h05
  4. trier une ComboBox par ordre alphabétique
    Par poussin_44 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/07/2007, 17h23
  5. Trier une colonne par date
    Par foobar42 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 17h46

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