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 Developer Oracle Discussion :

Problème transformation et utilisation de date


Sujet :

Sql Developer Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Problème transformation et utilisation de date
    Bonjour,

    J'ai un problème pour comparer une date, voici ma requête (en simplifié) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT                                                                        
            T01.SOCDOS,  
            T01.DATENT , to_date('0001-01-01' , 'yyyy-mm-dd' ) AS DENT, 
            T01.DATSOR , to_date('0001-01-01' , 'yyyy-mm-dd' ) AS DSOR             
    FROM    ZYES T01   
    WHERE   T01.SOCDOS = '003'          
    AND     DSOR >= '2004-01-01'
    Voici ce qu'il me met :
    ORA-00904: "DSOR" : identificateur non valide
    00904. 00000 - "%s: invalid identifier"
    Comment puis-je utiliser ma zone DATSOR transformée en date dans le WHERE ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Une expression dans la clause SELECT ne peut être utilisée via son alias dans la clause WHERE.
    Elle doit donc être répétée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  T01.SOCDOS,  
            T01.DATENT , to_date('0001-01-01' , 'yyyy-mm-dd' ) AS DENT, 
            T01.DATSOR , to_date('0001-01-01' , 'yyyy-mm-dd' ) AS DSOR             
    FROM    ZYES T01   
    WHERE   T01.SOCDOS = '003'          
    AND     to_date('0001-01-01' , 'yyyy-mm-dd' ) >= '2004-01-01'
    Toutefois, cette requête a peu de chances de retourner un résultat.
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse.
    Oui effectivement ma requête telle quelle ne risque pas de marcher.
    D'accord il faut que je répète mon expression dans le where, compris.

    En fait mon problème est que ma zone T01.DATSOR est au format date, de type JJ/MM/AA, et je voudrais transformer cette date en AAAA-MM-JJ pour la comparer, comme tu l'as compris, à 2004-01-01 et ainsi prendre les lignes ayant une date supérieure à à 2004-01-01.

    Comment puis-je faire ?

  4. #4
    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
    Une date n'a pas de format, c'est un type de donnée.
    Il faut transformer la chaîne de caractère en date avec TO_DATE et le format qui convient et non transformer la date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T01.SOCDOS,  
           T01.DATENT,
           T01.DATSOR
      FROM ZYES T01
     WHERE T01.SOCDOS = '003'
       AND T01.DATSOR >= to_date('2004-01-01','yyyy-mm-dd')

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ah ouais d'accord, j'ai pas encore ces réflexes là pour m'en sortir.

    Merci pour ta réponse rapide, je vais tester et je vous dis ça.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bon ça marche pas mal, merci. Mais j'ai encore dans ma sélection des dates du siècle dernier (30/10/98, 25/12/99), comme si l'année était sur 2 et non sur 4.

    Comment faire pour ne plus les avoir dans ma sélection ?

    C'est pour ça à la base que je voulais convertir ma zone DATSOR de type date en type date au format AAAA-MM-JJ

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bon c'est bon j'ai rien dit ça marche nikel, les dates en 99 sont en fait 2999, c'est normal que je les prenne. Dans SQL developer j'ai un affichage des dates
    au format JJ/MM/AA, du coup je ne vois pas le siècle.

    Savez-vous comment je peux faire pour transformer cet affichage ?

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';
    permet de modifier l'affichage des dates dans la session courante.

    Ou alors dans sqldeveloper :
    Outils > Préférences > Base de données > NLS > "Format de date" à modifier

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';
    permet de modifier l'affichage des dates dans la session courante.

    Ou alors dans sqldeveloper :
    Outils > Préférences > Base de données > NLS > "Format de date" à modifier

    Merci c'est super ça marche nikel.

    ça m'evitera de me planter dans les dates.

    Je clos donc ce topic, merci aux intervenants.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/05/2012, 11h48
  2. Transformer une dateTexte en Date utilisable
    Par simo1112 dans le forum Excel
    Réponses: 2
    Dernier message: 06/08/2011, 06h38
  3. [AC-2003] Problème de requête sous access en utilisant les dates
    Par rana dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/03/2010, 10h44
  4. Problème d'utilisation de Date
    Par soft0613 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/03/2008, 09h49

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