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

MS SQL Server Discussion :

[SQL2005] Filtrer une SUBSTRING


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut [SQL2005] Filtrer une SUBSTRING
    Bonjour!

    Je sens que je vais me faire taper dessus car c'est une question basique mais.. je n'ai pas trouvé la réponse.

    J'ai une table LIVRES qui contient un champ TITRE.
    Sur mon site j'aimerai faire un "moteur de recherche" c'est à dire un filtre par mot.

    Pour l'instant j'utilise un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE title LIKE @filter
    Le probleme avec ça, c'est que si le titre fait plusieurs mots et que je met l'un des mots dans la recherche, ben il est pas dans le résultat de la requette.

    Exemple pour un titre "Bienvenue sur developpez.net", si je recherche Bienvenue ben ce résultat n'apparait pas.

    Je ne sais pas trop comment je pourrais faire un truc pour que ce que je recherche fonctionne. J'ai bien essayé substring mais il faut specifier des bornes, or le mot recherché peut être n'importe où dans le titre.

    Des idées ? Merci d'avance

  2. #2
    Membre régulier Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 76
    Points
    76
    Par défaut
    Tu peux peut-être essayer de replacer tout les caractères non significatifs de la variable @filter par des % ( par exemple Like '%LIVRE%%' ou encore '%LIVRE%ROMAN%POLICIER%'... )

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    On ne vient pas sur un forum pour se faire taper dessus, on est là pour apprendre
    Si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TITRE FROM LIVRES WHERE TITRE LIKE @FILTER
    Cela équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TITRE FROM LIVRES WHERE TITRE = @FILTER
    Pour effectuer la recherche comme tu le souhaites, il faut passer par du code SQL dynamique, qu'on génère à chaque éxecution de la procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE PROCEDURE spLIVRES_GET_BY_TITRE
    	@FILTER VARCHAR(128)
    AS
    BEGIN
    	DECLARE @SQL VARCHAR(256);
    	SET @SQL = 'SELECT TITRE
    	FROM dbo.LIVRES
    	WHERE TITRE LIKE '''%' + @FILTER + '%''
     
    	-- PRINT @SQL;
    	EXEC (@SQL);
    END
    Si tu veux voir le code que la procédure génère, décommente le PRINT et commente le EXEC puis appelle ta procédure.

    Pour faire des recherches beaucoup plus avancées, tu peux aussi créer des indexes full-texte qui sont très efficaces aussi ...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Bonjour et merci de vos réponses.

    J'ai lu vos propositions et je ne comprenais pas trop car je ne connaissais pas le caractère %.
    En cherchant un peu j'ai vu que c'était ce qu'il me fallait.

    Au final un simple SELECT Title FROM MyTable WHERE Title LIKE %MONFILTRE% fonctionne très bien!
    (Je fais un projet en ASP.NET et C#, donc pas besoin de requette dynamique je la crée à la volée dans le programme).

    Merci beaucoup de vos réponses en tout cas.

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

Discussions similaires

  1. Impossibilité de filtrer une liste déroulante
    Par lito74 dans le forum Access
    Réponses: 12
    Dernier message: 27/02/2006, 11h03
  2. [C#] Filtrer une table
    Par diaboloche dans le forum ASP.NET
    Réponses: 8
    Dernier message: 05/12/2005, 15h17
  3. Comment filtrer une TListBox ?
    Par jmjmjm dans le forum Composants VCL
    Réponses: 9
    Dernier message: 17/11/2005, 13h08
  4. Filtrer une requete avec une variable array
    Par hugo69 dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/11/2005, 14h33
  5. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25

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