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

Langage SQL Discussion :

Rechercher mot qui commence par T_


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut Rechercher mot qui commence par T_
    Bonjour,

    Je cherche à extraire les lignes ou les valeurs de ma table_name commençent par T_ ou F_.

    J'ai utilisé la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select TABLE_NAME from cat where table_name like 'T_%' or 'F_%';
    Cependant, je récupère aussi les lignes qui ont pour valeur totoT_damned.
    Or les valeurs souhaitaient sous toujours sous la forme
    F_Good
    T_Nice
    F_BIEN


    Une idée pour forcer le like à n'opérer que sur les deux premières lettres ?

    édit :
    J'ai essayé ça mais cela ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select TABLE_NAME from cat where table_type='TABLE' and SUBSTR(table_name,1,2) like 'F_%' or SUBSTR(table_name,1,2) like 'T_%' ORDER BY TABLE_NAME ASC;
    J'obtiens toujours les lignes TEMP_DGT_CODEACTE alors que je ne le souhaite pas.


    Solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select TABLE_NAME from cat where table_type='TABLE' and SUBSTR(TABLE_NAME,1,2) IN ('F_','T_') ORDER BY TABLE_NAME ASC;
    Dernière modification par Invité ; 17/07/2013 à 10h15.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    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 109
    Points : 28 434
    Points
    28 434
    Par défaut
    Quel est ton SGBD qui considère la chaine 'F_%' comme une valeur booléenne ?

    Attention à la précédence des opérateurs en conjuguant des AND et des OR sans parenthèses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table_type='TABLE' AND SUBSTR(table_name,1,2) LIKE 'F_%' OR SUBSTR(table_name,1,2) LIKE 'T_%'
    est interprété comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (table_type='TABLE' AND SUBSTR(table_name,1,2) LIKE 'F_%') OR SUBSTR(table_name,1,2) LIKE 'T_%'
    Pour revenir à ton problème, le caractère '_' associé à LIKE est pris en compte comme un joker pour un seul caractère.
    Pour qu'il soit reconnu pour lui-même, il faut lui associer un caractère d'échappement, classiquement \.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSTR(table_name,1,2) LIKE 'F\_%' ESCAPE '\'

  3. #3
    Invité
    Invité(e)
    Par défaut
    Quel est ton SGBD qui considère la chaine 'F_%' comme une valeur booléenne ?
    Il s'agit d'Oracle.


    Effectivement, il y avait un problème de parenthèses, avec celles-ci, j'obtiens presque le bon résultat.
    Le bon résultat est obtenu avec la seconde partie de ta réponse.

    Ce qui me fait une deuxième solution , MERCI

    Solution 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_NAME FROM cat WHERE table_type='TABLE' AND SUBSTR(TABLE_NAME,1,2) IN ('F_','T_') ORDER BY TABLE_NAME ASC;
    Solution 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TABLE_NAME from cat where table_type='TABLE' and (SUBSTR(TABLE_NAME,1,2) like 'F\_%' ESCAPE '\' or SUBSTR(TABLE_NAME,1,2) like 'T\_%' ESCAPE '\' )ORDER BY TABLE_NAME ASC;
    La solution 1 est plus rapide de 5 ms.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    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 109
    Points : 28 434
    Points
    28 434
    Par défaut
    Je suis loin d'être convaincu qu'Oracle accepte la condition WHERE table_name LIKE 'T_%' OR 'F_%';

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    La deuxième solution est un peu bancale, soit vous recherchez les deux premiers caractères de la chaîne exactement (votre solution finale, rien à redire), soit vous recherche toute la chaîne qui commence par 'F_' ou 'T_', mais pas un mixte des deux.

    Essayez aussi ces requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TABLE_NAME
      FROM cat
     WHERE table_type = 'TABLE'
       AND (  table_name LIKE 'F\_%' ESCAPE '\'   -- ' -- commentaire mise en page forum
           OR table_name LIKE 'T\_%' ESCAPE '\'); -- ' -- commentaire mise en page forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT TABLE_NAME
      FROM cat
     WHERE table_type = 'TABLE'
       AND table_name LIKE 'F\_%' ESCAPE '\'  -- ' -- commentaire mise en page forum
     UNION 
    SELECT TABLE_NAME
      FROM cat
     WHERE table_type = 'TABLE'
       AND table_name LIKE 'T\_%' ESCAPE '\'; -- ' -- commentaire mise en page forum

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/12/2009, 16h53
  2. Requête mysql (rechercher tout ce qui commence par).
    Par toffff dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/03/2007, 09h44
  3. Parcourir tout les Id qui commence par "dz_"
    Par FMaz dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 24/03/2006, 21h46
  4. [Access] Requete exclue champ qui commence par alpha
    Par paflolo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/02/2006, 14h06
  5. Rechercher les occurences commencant par un chiffre
    Par tony slayer dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/05/2005, 14h48

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