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

DB2 Discussion :

Problème de maj/min dans une requête


Sujet :

DB2

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut Problème de maj/min dans une requête
    Bonjour,
    Pourquoi ces deux requêtes sont différentes dans la mesure où l'une me retourne un enregistrement de ma table et l'autre non?
    SELECT * FROM ma_table WHERE mon_champ = 'TOTO'
    SELECT * FROM ma_table WHERE mon_champ = 'toto'

    Merci
    6ril 4 ever

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Cela me semble normal dans la mesure où 'TOTO' et 'toto' sont des constantes texte alpha (literal), donc il n'y a pas de conversion maj/min. Par contre quand il s'agit d'instructions, de commande, de variables, etc... le compilateur, l'interpreteur, etc..., fait la conversion.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Je suis bien d'accord avec vous. Mais alors pourquoi pour d'autres bases teslles que MySql ou SQL Server il n'y a aucune différence entre les deux requêtes?
    6ril 4 ever

  4. #4
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Je ne sais et franchement cela me semble curieux pour une constante ???
    Peut être s'agissait-il d'une contante servant à la comparaison ou recherche de chaine en ne tenant pas compte de la casse, auquel cas...

    HJ

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    SELECT * FROM ma_table WHERE UPPER(mon_champ) = 'TOTO'
    SELECT * FROM ma_table WHERE LOWER(mon_champ) = 'toto'

    LOWER & UPPER, ça va marcher mais c'est à éviter car couteux en matière de temps de traitement paraît-il.

    pourquoi pour d'autres bases teslles que MySql ou SQL Server il n'y a aucune différence
    Faut demander à M$ alors...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bon je vais détailler, peut-être cela vous éclairera davantage.
    J'ai une application développée en J2EE (Websphere, Struts-layout, EJB, ...) qui utilise comme base DB2. J'ai importé depuis une autre base (SQL Server) des tables de paramètres comme par exemple (Pays, Devises, etc...)

    Prenons l'exemple de la table Pays(Code, Libellé), nous avons les données suivantes :
    FR - France
    US - USA
    ES - Espagne ...

    Au niveau d'un écran de saisie E1, j'ai un champ que j'appelle Pays Origine. Il est sur deux positions donc il ne peut contenir des lettres comme Fr, Us etc...
    L'utilisateur peut saisir des majuscules ou des minuscules dans le champ. D'ou mon problème posé car il ya un controle d'intégrité qui est géré par le conteneur EJB donc je ne peux pas accéder à cette requête. Si l'utilisateur saisit 'Fr', le controle d'intégrité va renvoyé une erreur car en base c'est 'FR' qui existe comme clé.
    Or sous SQL Server, MySql, il ne fait pas de différence entre la casse.

    En conclusion, sous DB2, 'FR', 'fr', 'Fr', 'fR' sont quatres pays différents tandis que sous Sql Server ou autre non
    6ril 4 ever

  7. #7
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Salut.

    Je n'ai pas une grande pratique de SQL mais AMHA tu devrais regarder du côté de la définition de la contrainte référentielle elle même et de la clé de référence qui assure le lien avec la clé de la table parente. Je ne sais pas si tu peux définir cette clé comme UPPER(CODE_PAYS).

    C'est juste une piste à explorer

    Cordialement
    Hédhili Jaïdane
    - - - - - - - - -

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Salut,
    Tout d'abord je voudrais vous remercier pour votre disponibilité. Je crois bien qu'il m'est impossible de gérer ça au niveau de la base DB2.
    De plus mes requêtes de sélection sont gérées par le conteneur EJB. Donc c'est réalisé en background, je n'ai aucune visibilité là dessus.
    Alors à moins d'une lumière venue de l'un de vous, je crois que je vais devoir appliquer un style CSS (text-transform: uppercase; ) sur les champs de mes écrans (bonjour la charge de travail)...

    6ril 4 ever

  9. #9
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Pour info mais cela ne résoud pas ton problème: http://www-128.ibm.com/developerwork...402greenstein/

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Pour Mercure,

    On doit pouvoir coder SELECT * FROM ma_table WHERE mon_champ = UPPER('ToTo') et le prédicat est (pas testé) indexable.

    D'une manière générale, il faut essayer de faire porter la fonction sur la chaïne de caractères. C'était un "tip" sur db2 V7, typiquement sur un cast de type de données mais en V8, ça semble de plus en plus intégrer dans l'optimiseur.

    Alex.

Discussions similaires

  1. problème avec l'apostrophe dans une requête
    Par mika0102 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2019, 16h51
  2. problème classement de date dans une requête
    Par heteroclite dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/10/2006, 15h55
  3. [VB6]ne pas faire la différence Maj/min dans une chaine
    Par dbozec dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/04/2006, 12h32
  4. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36
  5. Problème de Order by dans une requête
    Par showa dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/08/2004, 15h40

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