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 :

ORA-01841: year must be between -4713 and +9999


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut ORA-01841: year must be between -4713 and +9999
    Bonjour à tous,

    je suis coincée sur la requête que voici (sous Oracle 9):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   TO_DATE (char_content, 'YYYY')
    FROM tb_content, tb_topic
    WHERE tb_content.topic_id = tb_topic.ID
    AND topic_code = 'RP_DET_END_DATE'
    AND TO_DATE (char_content, 'YYYY') < TO_DATE ('2007', 'YYYY')
    ORDER BY char_content
    J'obtiens l'erreur suivante : "ORA-01841: (full) year must be between -4713 and +9999", and not be 0"

    Les "char_content" filtrés grâce à 'topic_code=...' sont des VARCHAR non nuls allant de '2003' à '9999'.
    Si j'enlève la clause "AND TO_DATE...", je n'ai pas d'erreur, il m'affiche bien des dates type :
    "01/12/2003
    01/12/2003
    01/12/2004"
    De même, si dans la clause "AND TO_DATE" je remplace char_content par '2003' ou '9999' par exemple, ça marche.
    Et je n'ai aucun espace ou autre caractère superflu dans un des char_content.

    Cela vous dit-il quelque chose ?

  2. #2
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    Vu que tu dis obtenir des dates sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     "01/12/2003
    01/12/2003
    01/12/2004"
    J'ai l'impression que ton champ char_content est de la forme 'DD/MM/YYYY'
    donc, lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TO_DATE(char_content, 'YYYY')
    ca revient à faire
    TO_DATE('01/12/2007','YYYY')
    et du coup, cela ne marche pas
    Et je pense que la conversion au format date n'est pas très utile, et qu'une simple comparaison de charactères suffira
    donc, tu auras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT   TO_DATE (char_content, 'DD/MM/YYYY')
    FROM tb_content, tb_topic
    WHERE tb_content.topic_id = tb_topic.ID
    AND topic_code = 'RP_DET_END_DATE'
    AND SUBSTR(char_content,7,4) < '2007'
    ORDER by char_content
    Autre chose, au niveau de ton order by, tu le fais au niveau d'un champ caractères, donc, tu vas obtenir l'ordre suivant :
    01/01/2007
    01/02/2005
    01/03/2006
    02/01/2005
    02/02/2007
    Il vaut mieux faire un ORDER BY sur la date, en précisant la position de ta colonne (dans le cas présent, ORDER BY 1) ou bien sur la colonne convertit en date (ORDER BY
    TO_DATE (char_content, 'DD/MM/YYYY'))

  3. #3
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Loyd1974 Voir le message
    Vu que tu dis obtenir des dates sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     "01/12/2003
    01/12/2003
    01/12/2004"
    J'ai l'impression que ton champ char_content est de la forme 'DD/MM/YYYY'
    Non char_content est bien un nombre de 4 chiffres à chaque fois.
    Mais la bonne nouvelle, c'est qu'en faisant un peu comme tu as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT   TO_DATE (char_content, 'YYYY')
    FROM tb_content, tb_topic
    WHERE tb_content.topic_id = tb_topic.ID
    AND topic_code = 'RP_DET_END_DATE'
    AND char_content < '2007'
    ça marche ! Ce qui est étrange, j'étais persuadée d'avoir essayé ça en premier mais bon j'ai dû faire un détail différent...
    Autre étrangeté, TOAD m'affiche encore
    "01/12/2003
    01/12/2003
    01/12/2004
    ..."
    Va comprendre ! Mais bon, pour ce que je veux faire de cette requête, ça ne sera pas gênant.
    Merci pour ton aide en tout cas !

  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
    un to_date(annee, 'YYYY') va te ramener le premier jour du mois actuel.
    Equivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TO_DATE('01/'|| TO_CHAR(SYSDATE,'MM')||'/'||annee,'DD/MM/YYYY')
    FROM dual
    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. Réponses: 2
    Dernier message: 23/07/2013, 23h25
  2. Réponses: 2
    Dernier message: 28/10/2011, 22h53
  3. [CR XI] Erreur:"subscript must be between 1 and size of the array"
    Par lozeba dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/05/2010, 18h30
  4. Ambiguity between 'TBitmap' and 'Windows::TBitmap' ???
    Par scifire dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2005, 12h44
  5. Réponses: 2
    Dernier message: 23/06/2004, 16h06

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