2013-07-10 2 views
4

У меня есть запрос SQL, как:тест, если строка содержит по крайней мере 2 слова в SQL

SELECT * 
FROM table 
WHERE lower(title) LIKE lower('%It's a beautiful string i think%') 

Мне нужно, чтобы проверить, по крайней мере, 2 слова в моей строке It's a beautiful string i think содержатся в моем названии поля ... Как я могу это сделать ?

Например, если в моем названии поля я есть строка I think it's beautiful, этот запрос должен вернуть мне этот объект ...

Спасибо!

+0

Так строки, которые имеют ' 'я a'' должен быть возвращен, а также , правильно? – dasblinkenlight

+1

Вы можете проверить наличие двух пространств: 'LIKE ('_% _%%')'. – xbonez

+0

Да для 'i a' .. возможно, проверьте раньше, если слово содержит больше двух символов –

ответ

0

Вы можете сгенерировать следующий SQL заявление динамически:

SELECT title, count(*) 
FROM 
    (
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% It %') 
    UNION ALL 
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% s %') 
    UNION ALL 
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% a %') 
    UNION ALL 
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% beautiful %') 
    UNION ALL 
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% string %') 
    UNION ALL 
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% I %') 
    UNION ALL 
    SELECT title 
    FROM table1 
    WHERE (' ' + lower(title) + ' ') LIKE lower('% think %') 
    ) AS table2 
GROUP BY title 
HAVING COUNT(*) >= 2 

Хранимая процедура может быть более эффективным, и вы могли бы вся работа выполняется на стороне сервера.

0

Вы можете использовать функцию как этого

CREATE FUNCTION [dbo].[CheckSentece] (@mainSentence varchar(128), @checkSentence varchar(128)) 
RETURNS NUMERIC AS 
BEGIN 
    SET @mainSentence=LOWER(@mainSentence) 
    SET @checkSentence=LOWER(@checkSentence) 
    DECLARE @pos INT 
    DECLARE @word varchar(32) 
    DECLARE @count NUMERIC 
    SET @count=0 
    WHILE CHARINDEX(' ', @checkSentence) > 0 
    BEGIN 
    SELECT @pos = CHARINDEX(' ', @checkSentence) 
    SELECT @word = SUBSTRING(@checkSentence, 1, @pos-1)  
    DECLARE @LEN NUMERIC 

    //Simple containment check, better to use another charindex loop to check each word from @mainSentence 
    SET @LEN=(SELECT LEN(REPLACE(@mainSentence,@word,''))) 
    if (@LEN<LEN(@mainSentence)) SET @[email protected]+1  
    SELECT @checkSentence = SUBSTRING(@checkSentence, @pos+1, LEN(@checkSentence)[email protected]) 
    END 
    return @count 
END 

и получить количество слов из второго предложения, содержащегося в первых одном

Смежные вопросы