Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2011, 11h21   #1
Membre éclairé
 
Avatar de Satch
 
Inscription : mars 2004
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mars 2004
Messages : 448
Points : 381
Points : 381
Envoyer un message via MSN à Satch
Par défaut [2008R2] Contains avec wildcard au début (pour recherche dans la DB)

Bonjour à tous.

Je rencontre un problème lorsque j'essaye de faire une requête avec contains

Imaginons la table Clients suivante :
Code :
1
2
3
id        nom       prenom
1         machin    jean
2         machine   robert
une requête du type
Code :
SELECT * FROM Clients WHERE  contains(Clients.nom, '"machin*"')
fonctionne parfaitement. Elle me renvoie bien les 2

Mais...
Code :
SELECT * FROM Clients WHERE  contains(Clients.nom, '"*machin"')
devrait me renvoyer le 1er. Seulement elle ne renvoie rien. Comme si le wildcard au début d'un mot ne fonctionnait pas.


A fortiori
Code :
SELECT * FROM Clients WHERE  contains(Clients.nom, '"*machin*"')
, qui correspond à ce que je veux faire ne marche pas non plus.


Je précise que c'est une version simplifiée de mon problème que je présente ici et que je ne PEUX PAS utiliser de like. Le but étant d'utiliser CONTAINSTABLE pour avoir un rank.

Existe-t-il une autre manière de faire la même chose ?
__________________
Je sais que désormais vivre est un calembour,
La mort est devenue un état permanent,
Le monde est aux fantômes, aux hyènes et aux vautours.
Moi je vous dis bravo et vive la mort.
Satch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 15h36   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

et que donne ceci :

Code sql :
1
2
 
SELECT * FROM Clients WHERE  contains(Clients.nom, '"machin"')
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 23h35   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
La norme SQL n'a pas prévu le *machin dans la clause CONTAINS.
Vous ne pouvez donc pas utiliser FTS pour cela.

Lisez l'article que j'ai écrit à ce sujet (et mon livre qui complète la chose) :
http://blog.developpez.com/sqlpro/p9...ext-search-no/

Il existe néanmoins des solutions de contournement. Mais comme vous ne nous avez pas dit la version de SQL difficile de vous en dire plus.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h45.


 
 
 
 
Partenaires

Hébergement Web