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

SQL Oracle Discussion :

Extraction entre de 2 dates et heures fixes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Extraction entre de 2 dates et heures fixes
    Bonjour,

    Je recherche une solution pour extraire des données entre deux dates et heure précise.

    je voudrais une requête qui me ramène tous les enregistrements d'une table dont la date est comprise entre date du jour à 12h (midi) et date du jour-1 à 12h (midi).

    Grossièrement ça doit donner quelque chose comme ça mais je ne parviens pas à l'écrire correctement
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM maTable WHERE maDate BETWEEN sysdate AND sysdate-1

    Et surtout je ne sais pas du tout comment agir sur l'heure pour fixer entre midi de la veille et midi du jour courant.

    Est-ce que quelqu'un peut venir à mon secours ?

    Merci d'avance pour votre aide.

    Info complémentaires :
    SGBD Oracle
    Le champ maDate est bien défini au format date

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss';
     
    Session altered.
     
    SQL> select trunc(sysdate-1)+0.5 , trunc(sysdate)+0.5 from dual;
     
    TRUNC(SYSDATE-1)+0. TRUNC(SYSDATE)+0.5
    ------------------- -------------------
    21/08/2013 12:00:00 22/08/2013 12:00:00
     
    SQL>
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maDate between trunc(sysdate-1)+0.5 and trunc(sysdate)+0.5
    L'ordre de bornes est important avec BETWEEN, c'est d'abord borne_inf puis borne_sup.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss';
     
    Session altered.
     
    SQL> select trunc(sysdate-1)+0.5 , trunc(sysdate)+0.5 from dual;
     
    TRUNC(SYSDATE-1)+0. TRUNC(SYSDATE)+0.5
    ------------------- -------------------
    21/08/2013 12:00:00 22/08/2013 12:00:00
     
    SQL>
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maDate between trunc(sysdate-1)+0.5 and trunc(sysdate)+0.5
    L'ordre de bornes est important avec BETWEEN, c'est d'abord borne_inf puis borne_sup.
    Yes ça à l'air de fonctionner parfaitement !!! Merci

    Par contre je travail sous sqldevelopper et lorsque je tente un affichage complet de la date ça ne fonctionne pas.

    J'ai essayé de le forcer avec
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT to_date(trunc(sysdate-1)+0.5,'DD/MM/YYYY HH24:MI:SS') as toto FROM dual;

    mais il me donne comme résultat : '21/08/13'

    Je ne maitrise pas bien sqldevelopper et je ne sais pas si je peux faire le
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss';
    sans prendre de risque.

    Merci de ton aide.

  4. #4
    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
    sysdate étant déjà une date, ce n'est pas to_date qu'il faut faire, mais to_char.

    Aucun risque quant à l'alter session, vous pouvez y aller les yeux fermés.
    Un conseil néanmoins, prenez l'habitude de travailler avec le format ISO plutôt que le format français :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER session SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
    Ce format est "triable" !

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ce format est "triable" !
    Qu'est ce que tu entends par "triable" ?

  6. #6
    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
    Que la chaîne se trie comme la date :
    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
    With MaTable (dt) as
    (
        select level + date '2013-07-29'
          from dual
    connect by level <= 5
    )
      select to_char(dt, 'dd/mm/yyyy') as dt_fr
           , to_char(dt, 'yyyy-mm-dd') as dt_iso
        from MaTable
    order by dt asc;
     
    DT_FR      DT_ISO
    ---------- ----------
    30/07/2013 2013-07-30
    31/07/2013 2013-07-31
    01/08/2013 2013-08-01
    02/08/2013 2013-08-02
    03/08/2013 2013-08-03
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    order by dt_fr asc;
     
    DT_FR      DT_ISO
    ---------- ----------
    01/08/2013 2013-08-01
    02/08/2013 2013-08-02
    03/08/2013 2013-08-03
    30/07/2013 2013-07-30
    31/07/2013 2013-07-31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    order by dt_iso asc;
     
    DT_FR      DT_ISO
    ---------- ----------
    30/07/2013 2013-07-30
    31/07/2013 2013-07-31
    01/08/2013 2013-08-01
    02/08/2013 2013-08-02
    03/08/2013 2013-08-03

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Dans le select vous pouvez utiliser to_char (ici votre to_date est en fait un to_date(to_char(sysdate),'dd/mm/yyyy hh24:mi:ss'))
    Il y a donc une conversion implicite.

    alter session ne modifie que votre session, donc pas de risque.
    Dans sqldeveloper vous pouvez le paramétrer dans :
    Outils > Préférences > Base de données > NLS > "Format de date"

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

Discussions similaires

  1. [JSP] Date et heure fixe (dynamique)
    Par sihamnet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 28/04/2012, 17h30
  2. [BO 6.5.1] Différence entre 2 dates en heure
    Par aurelie83 dans le forum Débuter
    Réponses: 2
    Dernier message: 30/01/2008, 13h47
  3. Réponses: 2
    Dernier message: 24/03/2007, 15h53
  4. Réponses: 1
    Dernier message: 20/12/2006, 17h18
  5. [VB]Enlever 1 jour à une date si heure est comprise entre...
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 20/01/2006, 14h48

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