2011-11-08 3 views
2

J'utilise la requête suivante pour obtenir toutes les données qui contiennent les quelques mots (qui sont séparés par une fonction) dans la colonne nom de la table inventoryLocalization.une requête sql avec plusieurs mots de recherche

Dans l'exemple, j'ai divisé la chaîne "rouge vert bleu". comme il se doit, il a retourné toutes les lignes comme opérateur ou.

SELECT distinct 
inL.name 
FROM dbo.[inventoryLocalization] inL 
JOIN fnSplitString (N'red green blue',' ') words ON (inL.name LIKE '%'+ words.item +'%') 

Ma question est, est-il possible d'obtenir des lignes qui a tous les mots, comme dans l'opérateur ET.

Répondre

3
select inL.name from dbo.[inventoryLocalization] inL 
where not exists 
    (select 1 from fnSplitString(N'red green blue',' ') words 
    where (inL.name NOT LIKE '%'+ words.item +'%')) 
0

Essayez quelque chose comme ceci:

DECLARE @SomeWords NVARCHAR(200), @Num INT 

SET @SomeWords = 'red green blue' 

SELECT @Num = COUNT(*) 
FROM fnSplitString (@SomeWords,' ') 

SELECT inL.name 
FROM dbo.[inventoryLocalization] inL 
JOIN fnSplitString (@SomeWords,' ')words 
ON (inL.name LIKE '%'+ words.item +'%') 
GROUP BY inL.name 
HAVING COUNT(*) = @Num 
Questions connexes