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 :

Missing right parenthesis (afficher les 15 derniers jours)


Sujet :

SQL Oracle

  1. #1
    Candidat au Club Avatar de bugket
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Missing right parenthesis (afficher les 15 derniers jours)
    Bonjour,

    J'ai un probleme dans ma requete pl/sql lorsque je l'execute il me sort "missing right parenthesis".
    Au fait je cherche à afficher les donner d'une table seulement pour les 15 derniers jours a partir de sysdate du coup je sais pas si mon code est bon aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select *   From time  where employee_id = 3
          order by task_date, ((to_date(task_date,'dd/mm/yyyy')) > to_date((sysdate - 15),'dd/mm/yyyy')))
    Merci.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il va falloir s'y mettre. L'erreur vous indique que les parenthèses fermées ne correspondent pas en nombre avec ceux ouvertes. Donc il suffit de bien les suivre et vous allez trouver où cela se passe.
    Un deuxième conseil : vous n'est pas en train de créer le langage SQL donc vous devrez étudier et comprendre la syntaxe des requêtes que vous écrivez!
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    order by t.task_date, ((to_date(task_date,'dd/mm/yyyy')) > to_date((sysdate - 15),'dd/mm/yyyy')))

  3. #3
    Candidat au Club Avatar de bugket
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Je crois avoir trouver la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select *  From time where employee_id = 3 and
           (to_date(task_date,'dd/mm/yyyy') > to_date((sysdate - 15),'dd/mm/yyyy')) order by task_date ;
    (ceci est du SQL mnitu )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      (to_date(task_date,'dd/mm/yyyy') > to_date((sysdate - 15),'dd/mm/yyyy')) order by tt.task_date ;
    Mais merci pour ta réponse sa m'a permis de rectifier mon code x)

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Attention aux dates !
    un TO_DATE : varchar2 -> Date
    Un To_CHAR : Date -> Varchar2

    Ne jamais faire de TO_DATE(une_date)
    Si on veut tronquer une date: TRUNC(une_date <, Spec>)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Candidat au Club Avatar de bugket
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Mais du coup ce code est bon au finale ou pas, parce que je cherche a afficher le contenu des 15 jours precedent :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from time where employee_id = 3 and (to_date(task_date,'dd/mm/yyyy') > to_date((sysdate - 15),'dd/mm/yyyy')) and (to_date(task_date,'dd/mm/yyyy') < to_date(sysdate,'dd/mm/yyyy')) order by task_date ;

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Bein non, pas bon !

    si task_date est une DATE (au sens type de données Oracle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from time where employee_id = 3 and TRUNC(task_date) > TRUNC(sysdate - 15) and task_date < TRUNC(sysdate) order by task_date ;
    si task_date est une Chaine de caractère (au sens type de données Oracle) qui est l'expression d'une date au format JJ/MM/AAAA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from time where employee_id = 3 and TO_DATE(task_date, 'DD/MM/YYYY') > TRUNC(sysdate - 15) and To_DATE(task_date, 'DD/MM/YYYY') < TRUNC(sysdate) order by task_date ;

    Enfin, pour donner un exemple de ce que ça donne comme sélection :
    SYSDATE = Jeudi 16/06/2016 15:22:00

    La requête prendra toutes les dates entre Jeudi 02/06/2016 00:00:00 et Mercredi 15/06/2016 23:59:59
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Candidat au Club Avatar de bugket
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    AAh ok ok je vois, merci x)
    du coup j'ai utilisé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from time where employee_id = 3 and TRUNC(task_date) > TRUNC(sysdate - 15) and task_date <= TRUNC(sysdate) order by task_date ;
    Et du coup en reprenant ton exemple cela donnera
    SYSDATE = Jeudi 16/06/2016 15:22:00

    La requête prendra les dates de Jeudi 02/06/2016 00:00:01 a jeudi 16/06/2016 23:59:59
    avec Jeudi 02/06/2016 00:00:01 parce qu'il prend la journée de jeudi aussi enfin c'est ce que sa me donne :p

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    SYSDATE = Jeudi 16/06/2016 15:22:00

    La requête prendra les dates de Jeudi 02/06/2016 00:00:01 a jeudi 16/06/2016 23:59:59
    avec Jeudi 02/06/2016 00:00:01 parce qu'il prend la journée de jeudi aussi enfin c'est ce que sa me donne :p
    Faux sur le 02/06/2016 00:00:01, et sur le jeudi 16/06/2016 23:59:59
    Pour sysdate = 16/06/2016 15:22:00,
    TRUNC(sysdate - 15) = Mercredi 01/06/2016 00:00:00

    TRUNC(task_date) > TRUNC(sysdate - 15) => Supérieur ou égal à Jeudi 02/06/2016 00:00:00 (Les jours commencent à 0h 0min 0sec

    task_date <= TRUNC(sysdate) : task_date <= 16/06/2016 00:00:00 .. donc pas 16/06/2016 00:00:01, ni 23:59:59
    Pour prendre en compte jeudi 16/06/2016 23:59:59, il faut tronquer la date TRUNC(task_date) <= TRUNC(sysdate)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Heu....
    TRUNC(task_date) > TRUNC(sysdate - 15) => Strictement Supérieur ou égal à Jeudi 02/06/2016 00:00:00 (Les jours commencent à 0h 0min 0sec
    ou Supérieur ou égal à Jeudi 02/06/2016 00:00:01
    Pour prendre en compte jeudi 16/06/2016 23:59:59, il faut tronquer la date TRUNC(task_date) <= TRUNC(sysdate) (strictement inférieur)
    fixed

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TO_CHAR(ladate, 'Day DD/MM/RRRR HH24:MI:SS') jour,
    			TO_CHAR(TRUNC(ladate - 15), 'Day DD/MM/RRRR HH24:MI:SS') "j-15",
          TO_CHAR(TRUNC(ladate), 'Day DD/MM/RRRR HH24:MI:SS') j0
    FROM (SELECT SYSDATE + 2 AS ladate FROM dual)
    JOUR : Jeudi 16/06/2016 17:26:34
    J-15 : Mercredi 01/06/2016 00:00:00
    J0 : Jeudi 16/06/2016 00:00:00

    TRUNC(task_date) > TRUNC(sysdate - 15)
    J-15 : Mercredi 01/06/2016 00:00:00
    pour task_date le mercredi 01/06/2016 de 0h00m00s à 23h59m59s, trunc(task_date) = mercredi 01/06/2016 0h00min00s, donc n'est pas supérieur à J-15
    Pour task_date le jeudi 02/06/2016 de 0h00m00s à 23h59m59s, trunc(task_date) = jeudi 02/06/2016 0h00min00s, donc est supérieur à J-15

    => TRUNC(task_date) > TRUNC(sysdate - 15) => Supérieur ou égal à Jeudi 02/06/2016 00:00:00 (Les jours commencent à 0h 0min 0sec)


    task_date <= TRUNC(sysdate)
    J0 : Jeudi 16/06/2016 00:00:00

    Pour task_date le jeudi 16/06/2016 de 0h00m00s à 23h59m59s, trunc(task_date) = jeudi 16/06/2016 0h00min00s, donc est égal à J0. Donc il faut bien mettre <=
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Oups.... c'était trunc(task_date) et pas juste task_date....

    Mais il est préférable de ne faire le TRUNC que sur les bornes et pas sur la colonne en base (potentiellement indexée)

    désolé

  12. #12
    Candidat au Club Avatar de bugket
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par McM Voir le message
    Faux sur le 02/06/2016 00:00:01, et sur le jeudi 16/06/2016 23:59:59
    Pour sysdate = 16/06/2016 15:22:00,
    TRUNC(sysdate - 15) = Mercredi 01/06/2016 00:00:00

    TRUNC(task_date) > TRUNC(sysdate - 15) => Supérieur ou égal à Jeudi 02/06/2016 00:00:00 (Les jours commencent à 0h 0min 0sec

    task_date <= TRUNC(sysdate) : task_date <= 16/06/2016 00:00:00 .. donc pas 16/06/2016 00:00:01, ni 23:59:59
    Pour prendre en compte jeudi 16/06/2016 23:59:59, il faut tronquer la date TRUNC(task_date) <= TRUNC(sysdate)
    Ah ok ok autant pour moi j'ai mal cru xD thx pour ton aide

  13. #13
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Mais il est préférable de ne faire le TRUNC que sur les bornes et pas sur la colonne en base (potentiellement indexée)
    On peut très bien indexer une date pour qu'elle soit utilisée avec des TRUNC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX IDX_TIME_DTE ON TIME (employee_id, TRUNC(task_date))
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

Discussions similaires

  1. [MySQL-5.5] Afficher les 365 derniers jours
    Par Loulo8407 dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/08/2014, 09h16
  2. Afficher les 3 derniers jours (vendredi - samedi - dimanche) de toute la semaine
    Par bienchris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/08/2011, 09h50
  3. [Vxi3] Afficher les 30 derniers jours dans un graph
    Par Marshall06 dans le forum Deski
    Réponses: 4
    Dernier message: 23/03/2011, 16h16
  4. [Dates] Afficher les 7 derniers jours
    Par fabien14 dans le forum Langage
    Réponses: 7
    Dernier message: 12/05/2007, 00h16

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