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 :

Problème date requête SQL


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Problème date requête SQL
    Bonjour,

    J'ai un problème sous SQL car j'ai l'erreur suivante qui apparaît "ORA-01848: day of year must be between 1 and 365 (366 for leap year)" lorsque j’exécute ce petit code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(DATASTREAM.P1EFTJ,0,0,to_number(to_char(user::jdatetimeToCalendar(DATASTREAM.P1EFTJ),'YYYYMMDD')))

    Je souhaiterais savoir comment résoudre ce problème, car je cherche éperdument et je demeure sans réponse.

    Merci d'avance.

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Le format que me sort SQL pour la date est le suivant
    SQL me sors ce resultat là pour une date : 999999


    Or je voudrais la date au format julienne.

    Merci d'avance

  3. #3
    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
    Et les autres dates ressemblent à quoi ?
    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.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Les autres dates ont le format suivant
    Les autres dates des autres colonnes pour les dates ont le format suivant:

    111056 ou encore 111251 et il y'a que pour celle colonne que j'ai ce problème de date avec 999999

  5. #5
    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
    Ni 111056, ni 111251ne correspondent au format 'YYYYMMDD'.
    Donc il n'y a pas que 999999 qui pose problème.

    Que fait la fonction user::jdatetimeToCalendar ?
    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.

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    La fonction user::jdatetimeToCalendar sert à transformer une date julian au format grégorien.

    Donc en fait c'est une erreur de ma part, je souhaiterai transformer cette date "9999" au format grégorien

  7. #7
    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
    999999 est donc à prendre en compte comme une valeur erronée, au même titre que 0.
    Donc à laisser de côté, comme le 0, avec le DECODE.
    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.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Désolé pour ma réponse tardive.

    Après y avoir reflechis c'est vrai que "999999" est à prendre comme une valeur NULL ou erronnée.

    Ce que souhaiterai faire c'est dire par rapport à la requête que j'ai de convertir les dates au format "YYYYMMDD" mais si c'est dates sont supérieur à 365 alors mettre NULL

    Mais je ne sais pas comment je pourrais procéder a ton aide.

    Merci pour ton aide en tout cas AL1

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    En fait j'ai pensé à crée une fonction qui vérifie la date et retourne un défaut ou null si elle est pas valable.

    Et je souhaiterai faire ça à partir du decode. Je suis preneur pour toutes les idées

    Merci d'avance

  10. #10
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Tu peux partir sur une fonction dans laquelle tu fais un TO_DATE sur la valeur passée en paramètre, et dans laquelle tu gères les erreurs si la date n'est pas au bon format, avec un bloc "EXCEPTION WHEN ...".
    Donc si on imagine que tu passes 2 paramètres a la fonction, du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE OR REPLACE FUNCTION ma_fonction (textvalue IN VARCHAR2, mask IN VARCHAR2)
    alors tu peux simplement y placer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RETURN TO_DATE (textvalue , mask);
    et gérer l'erreur si la valeur passée n'est pas bonne et ne peut pas être "castée" en date dans le bloc EXCEPTION (et y faire un "RETURN NULL" ou autres).

    Tu pourrais alors appeller ta fonction par exemple via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ma_fonction ('07-Jul-2016', 'dd-Mon-YYYY') my_date FROM DUAL
    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Merci Sunchaser pour la réponse que tu m'as apporté.

    Mais en fait je travail sur un ETL, et mon code SQL je dois le mettre à un endroit précis (c'est à dire dans la colonne P1EXDJ)

    Ainsi lorsque j’exécute mon Mapping les dates doivent être convertis.


    Ainsi j'ai pensé à réaliser une fonction en partant de celle que j'ai posté, mais en ajoutant le cas ou si la date n'est pas valide alors il la remplace par "DEFAULT" ou "NULL" et je souhaiterai savoir si il est possible de réaliser ceci.

    Merci d'avance.

  12. #12
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Je suis désolé, mais en fait j'ai plus de questions que de réponses ... il y a un truc que je ne comprends pas (peut être al1_24 avait compris):
    . Tu as ce "truc" -> user::jdatetimeToCalendar(DATASTREAM.P1EFTJ), qui doit te sortir une valeur texte (varchar quoi) au format 'YYYYMMDD', correct ?
    . Après, dessus, tu fais un "to_char(..., 'YYYYMMDD')" -> donc c'est en fait ici que tu voudrais / devrais caster la valeur en date a partir du moment ou la valeur peut être transformée en date, correct ? Donc, c'est ici qu'il faudrait plutôt placer la fonction dont je te parlais.
    . Ensuite, par dessus tout cela, tu fais un to_number ... ? Pourquoi faire, si ce que tu veux c'est une date ?
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    C'est bon j'ai trouvé une solution à mon problème.

    Il fallait juste que je rajoute un petit paramètre dans mon DECODE.

    Merci pour vos réponses en tout cas !

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

Discussions similaires

  1. [XL-2007] Problème de date - Requète SQL
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 16/09/2013, 14h43
  2. Problème de requête sql date
    Par youba11 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 15/07/2008, 20h59
  3. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  4. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

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