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 comparaison de date sur 4 caractères


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut Problème comparaison de date sur 4 caractères
    Bonjour,
    dans ma table carte, j'ai une donnée finval de type varchar(4) (ex: 0209=fevrier 2009).

    seulement, je sois faire une requete qui me resors toutes les dates supérieures à '0110'. mais j'ai pas le bon résultat. Ne faut-il pas q je convertisse la date? si oui? comment la convertir?

    merci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  
    select a.FINVAL
    from carte a
    where (a.CAR_FINVAL >  date('0110'))
    Il aurait fallu que vos codification soient de la forme AAmm et non MMAA qui n'a aucun sens.

    De fait vous êtes obligé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE SUBSTRING(a.CAR_FINVAL, 3, 2) + SUBSTRING(a.CAR_FINVAL, 1, 2) > SUBSTRING('0110', 3, 2) + SUBSTRING('0110', 1, 2)
    Ce qui va être épouvantablement contre performant !

    A +

    A cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select CAR_FINVAL from gbs_carte
    where (SUBSTR(CAR_FINVAL, 3, 2) + SUBSTR(CAR_FINVAL, 1, 2) > SUBSTR('0110', 3, 2) + SUBSTR('0110', 1, 2));
    , j'ai le résultat ci dessous:
    0510
    0909
    0909
    0211
    0310
    0710
    1010
    0410
    0710
    0609
    j'utilise oracle sql+

    Citation Envoyé par carmella Voir le message
    j'utilise oracle sql+
    Tu es dans un forum SQL Server

    Bonsoir!
    pouvez vous mettre mon message dans Oracle-SQP plus?
    Merci.

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Et si tu reconstruisais ta borne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT a.FINVAL
    FROM carte a
    WHERE (a.CAR_FINVAL >  to_date('010110', 'ddmmyyyy'))
    Si tu as un index utile sur CAR_FINVAL, ne pas appliquer de fonctions dessus te permet de l'utiliser...

    (Supérieur ou égal si tu veux inclure le premier janvier...)

  3. #3
    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
    Pacmann votre solution ne fonctionnera pas puisque les mois sont avant les années, de fait mars 2009 sera postérieur à février 2010.

    Désolé pour les index mais vous êtes obligé de convertir en date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.FINVAL
    FROM carte a
    WHERE to_date(a.CAR_FINVAL, 'mmyy') >  to_date('0110', 'mmyy')

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Oh... à cause du début du premier post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE (a.CAR_FINVAL >  date('0110'))
    Je pensais que CAR_FINVAL est une date...

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut
    Bonjour,

    Les 2 formules ont marché!:D


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select CAR_FINVAL from gbs_carte
    where (SUBSTR(a.CAR_FINVAL, 3, 2) >= SUBSTR('0110', 3, 2) and  SUBSTR(a.CAR_FINVAL, 1, 2)  >= SUBSTR('0110', 1, 2));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.CAR_FINVAL from gbs_carte a where  to_date(a.CAR_FINVAL, 'mmyy') >=  to_date('0110', 'mmyy');
    Merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/11/2012, 16h31
  2. Problème comparaison de date
    Par stmastma dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/02/2010, 10h48
  3. Récupérer le mois d'une date sur 2 caractères
    Par pontoise dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/11/2008, 14h42
  4. [Dates] Problème comparaison de dates
    Par Davboc dans le forum Langage
    Réponses: 2
    Dernier message: 23/08/2006, 12h23
  5. problème comparaison de date VB
    Par af_airone dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 20/10/2005, 11h18

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