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

Développement SQL Server Discussion :

Ccomment échapper tous les wildcards d'une string automatiquement ?


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut Ccomment échapper tous les wildcards d'une string automatiquement ?
    Bonjour,
    Disons que je fasse une requête dont une des colonnes (disons COL1) peut contenir 0,1,2 ou plus de caractères considérés comme wildcards, genre % _ [] ^ - ! * #
    Comment est-ce que je pourrais faire pour rajouter dans ma requête une colonne COL2 qui comprendrait un like sur COL1 ? Je ne voudrais pas en effet que les wildcards soit interprêtés comme tels mais uniquement comme les caractères qu'ils sont. Je voudrais pouvoir échapper automatiquement tous les caractères "spéciaux". Est-ce qu'il n'y a pas un "truc" du genre faire précéder par @ ou @@ ma colonne COL1 pour qu'aucun des caractères la composant ne soit interprêté ?
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    select ID, COL1 from MyTable
    =>
    ID        COL1
    1       aaa%[re]
    2       prefixaaabbb%[re]
    3       prefixaaaccc%[re]
     
    select 'prefix' + mt1.COL1 + '%', mt1.COL1, (case when exists(select 1 from #jjg mt2 where mt1.id = mt2.id and mt2.COL1 like 'prefix' + mt1.COL1 + '%') then 'MEME COL1 AVEC prefix EXISTE' else 'MEME COL1 AVEC prefix EXISTE PAS' end) as COL2
    from MyTable mt1
     
    Le rendu ici serait :
    COL1	                                COL2
    aaa%[re]	                   MEME COL1 AVEC prefix EXISTE PAS
    prefixaaabbb%[re]        MEME COL1 AVEC prefix EXISTE PAS
    prefixaaaccc%[re]         MEME COL1 AVEC prefix EXISTE PAS
     
    au lieu de ceci attendu :
    COL1	                                COL2
    aaa%[re]	                   MEME COL1 AVEC prefix EXISTE
    prefixaaabbb%[re]        MEME COL1 AVEC prefix EXISTE PAS
    prefixaaaccc%[re]         MEME COL1 AVEC prefix EXISTE PAS
    Merci pour votre aide,

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Dans la syntaxe normalisée de l'opérateur LIKE, vous devez choisir votre caractère d’échappement à l'aide de la clause ESCAPE. Personnellement dans ce cas de figure j'utilise le caractère sonnette (bell, n°7).
    Associez cela avec une UDF que vous allez créé et le tour est joué...

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE FUNCTION dbo.F_LIKE_WILDCAR_EXCEPT (@STRING NVARCHAR(256))
    RETURNS NVARCHAR(256)
    AS
    BEGIN
        SET @STRING = REPLACE(@STRING, '%', NCHAR(7) + '%');
        SET @STRING = REPLACE(@STRING, '_', NCHAR(7) + '_');
        SET @STRING = REPLACE(@STRING, '[', NCHAR(7) + '[');
        SET @STRING = REPLACE(@STRING, ']', NCHAR(7) + ']');
        SET @STRING = REPLACE(@STRING, '^', NCHAR(7) + '^');
        RETURN @STRING;
    END;
    Dans votre requête ajoutez le ESCAPE au LIKE.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  2. afficher tous les champs d'une table
    Par julio84 dans le forum ASP
    Réponses: 8
    Dernier message: 19/01/2005, 10h31
  3. Retrouver tous les champs d'une table
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/07/2004, 20h40
  4. Afficher tous les champs d'une table avec dbexpress et MySQL
    Par LHT dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/06/2004, 17h11
  5. Envoie d'un message a TOUS les composant d'une form
    Par chddv dans le forum Composants VCL
    Réponses: 7
    Dernier message: 15/09/2003, 09h47

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