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 :

Oracle : Tri de date incorrect


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de aelmalki
    Inscrit en
    Mars 2009
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 250
    Par défaut Oracle : Tri de date incorrect


    J'ai un petit souci de trie de date :
    J'ai un table où il y'a un champ de type Date qui est alimenter a fur et à mesure des modifications dans l'application, ce champ peut contenir des fois des valeur NULL.

    lorsque je demande un trie décroissant, il m'affiche d'abord les valeurs NULL puis les champs date trier, or moi je cherche d'abord à afficher les valeurs date au début puis ceux qui ont la valeur NULL à la fin de la liste,

    Est ce que vous pouvez m'aider concernant ce point ?

    Pour le trie, j'utilise la clause ORDER BY simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY DATE_MODIF DESC;
    Merci infiniment pour vos réponse

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Ce genre de requete peut vous aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * 
        from Matable 
        order by 
              case ladate when null then 0 else 1 end desc , ladate desc
    A tester et adapter

    Bon courage

  3. #3
    Membre éclairé Avatar de aelmalki
    Inscrit en
    Mars 2009
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 250
    Par défaut
    Merci pour votre réponse,

    Le souci est toujours détécté, j'ai fait exactement ce que vous m'avez suggerer, mais en vain...

    Est ce que à votre avis le souci peut venir de mon SGBDR ? j'utiliser Oracle 9i

  4. #4
    Membre éclairé Avatar de aelmalki
    Inscrit en
    Mars 2009
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 250
    Par défaut
    En recherche sur internet concernant la clause order by et les nulls, j'ai trouver qu'on pourra ajouter une autre clause nulls last afin d'obtenir le résultat que je cherche.

    Je pense que par défaut il est a nulls first

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY DATE_MODIF DESC NULLS LAST
    Je vais opter pour cette solution vu que je suis un peu présse, mais je voudrais bien conprendre le bout de code que vous m'avez donner, juste a titre d'information.

    Merci à vous...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Le NULLS LAST semble être une bonne solution.

    J'ai testé sous Oracle 10g celle proposée par Yanika_bzh, le tri n'est pas vraiment celui attendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SQL> select *
      2  from 
      3  (
      4  select 1 as champs1 from dual
      5  union all
      6  select 4 from dual
      7  union all
      8  select 12 from dual
      9  union all
     10  select 2 from dual
     11  union all
     12  select null from dual
     13  union all
     14  select 123 from dual
     15  union all
     16  select 99 from dual
     17  union all
     18  select null from dual
     19  )
     20  order by case champs1 when null then 0 else 1 end desc;
     
       CHAMPS1
    ----------
             1
             4
            12
     
     
           123
            99
             2
     
    8 ligne(s) sélectionnée(s).

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Le NULLS LAST semble être une bonne solution.

    J'ai testé sous Oracle 10g celle proposée par Yanika_bzh, le tri n'est pas vraiment celui attendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SQL> select *
      2  from 
      3  (
      4  select 1 as champs1 from dual
      5  union all
      6  select 4 from dual
      7  union all
      8  select 12 from dual
      9  union all
     10  select 2 from dual
     11  union all
     12  select null from dual
     13  union all
     14  select 123 from dual
     15  union all
     16  select 99 from dual
     17  union all
     18  select null from dual
     19  )
     20  order by case champs1 when null then 0 else 1 end desc;
     
       CHAMPS1
    ----------
             1
             4
            12
     
     
           123
            99
             2
     
    8 ligne(s) sélectionnée(s).
    Votre test n'a rien a voir avec mon exemple...
    le premier case est celui qui va permettre de gerer le NULL dans la colonne, le deuxieme tri est celui qui va vous permettre de realiser l'order attendu

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    create table #T1 (ladate datetime null, id int)
    insert into #T1 values ('20090101',1)
    insert into #T1 values ('20090111',2)
    insert into #T1 values ('20090221',3)
    insert into #T1 values ('20090317',4)
    insert into #T1 values ('20090104',5)
    insert into #T1 values (null,6)
    insert into #T1 values (null,7)
    insert into #T1 values (null,8)
     
    select * from #T1 order by /* Gestion du null */ case ladate when null then "0" else "1" end desc , /* tri normal */ ladate desc
     
    Resultat :
    ladate                          id
    Mar 17 2009 12:00AM	          4
    Feb 21 2009 12:00AM	          3
    Jan 11 2009 12:00AM	          2
    Jan  4 2009 12:00AM	          5
    Jan  1 2009 12:00AM	          1
    	                          6
    	                          7
    	                          8
    Si null, alors on simule une colonne dont l'ordre de tri (0) sera toujours inférieure a la colonne si non null (1)

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

Discussions similaires

  1. Tri de dates incorrectes
    Par Jah73 dans le forum Développement
    Réponses: 5
    Dernier message: 03/06/2013, 10h15
  2. Equivalent à TRUNC ou ROUND d'Oracle sur les Dates ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/05/2005, 09h45
  3. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19
  4. Tri et Dates
    Par romainw dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2004, 11h30
  5. Filtre, Tri, Index, Date
    Par gibet_b dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/07/2004, 16h30

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