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 Firebird Discussion :

[FB 2.1] Opérateur LIKE et Majuscules/Minuscules


Sujet :

SQL Firebird

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 57
    Points : 53
    Points
    53
    Par défaut [FB 2.1] Opérateur LIKE et Majuscules/Minuscules
    Dans un fichier article assez volumineux (150.000 références) la requête SQL suivante est assez longue (3 à 4 secondes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM ARTICLES
    WHERE UPPER(DESIGNATION) LIKE 'BOULON%'
    La colonne article est indéxée, il semble que ce soit la fonction UPPER qui ralentisse la requête car sans cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM ARTICLES
    WHERE DESIGNATION LIKE 'BOULON%'
    la requête est instantanée.

    L'inconvénient c'est que les articles en minuscules ne sont pas trouvés...
    J'ai donc l'impression que le moteur Firebird converti toute la table en majuscules puis ensuite exécute la requête...
    Existe t'il un moyen d'utliser l'opérateur LIKE de façon a ce qu'il soit insensible à la casse ?

    NB : le problème est le même avec STARTING WITH

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Tu peux tenter de définir une vue...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Bonjour,

    Ce n'est pas le upper qui coute cher, c'est juste que du coup il ne peut plus utiliser l'index.

    Il faut créer un index insensible à la casse (en lui mettant un upper) quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX IDX_DESIGN ON ARTICLES COMPUTED BY (UPPER (DESIGNATION COLLATE FR_FR));

    Uniquement à partir de fb2.0.

    Sinon sous fb 1.5 il faut soit bidouiller (soit en ajoutant un caractere set / Collate soit en créant une colonne designation_upper que l'on alimente via trigger avec upper(new.designation)) et que l'on indexe.

    Cordialement

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 57
    Points : 53
    Points
    53
    Par défaut
    Bon j'ai trouvé il faut utiliser les COLLATION

    Tout d'abord il faut définir le jeu de caractère de la base à ISO8859_1 lors de la création de la base.

    Ensuite il faut lors de la création du champ ARTICLES indiquer l'option COLLATE FR_FR

    Et enfin créer un index utilisant le jeu de caractère FR_FR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE INDEX IDX_ARTICLES_DESIGNATION ON ARTICLES 
    COMPUTED BY (UPPER (DESIGNATION COLLATE FR_FR))
    Pour plus d'information voir l'article (en anglais) :http://www.destructor.de/firebird/ca...tivesearch.htm

  5. #5
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    tu peux faire mieux encore
    et utiliser pour ta recherche l'ordre de tri FR_FR_CI_AI insensible à la casse et aux accents
    cf dans les commentaires :
    http://blog.developpez.com/index.php...lettr#comments
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

Discussions similaires

  1. Expression en majuscule minuscule
    Par auriolbeach dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/08/2019, 09h47
  2. Majuscules - minuscules dans les requêtes
    Par calogerogigante dans le forum Requêtes
    Réponses: 11
    Dernier message: 25/10/2005, 11h36
  3. Opérateur Like
    Par clems34 dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 26/08/2005, 16h22
  4. Opérateur like
    Par Troopers dans le forum ASP
    Réponses: 3
    Dernier message: 15/09/2003, 19h19
  5. recherche Xpath: problème de casse (majuscule/minuscule)
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 29/07/2003, 10h42

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