SQL匹配确切的单词

时间:2017-03-10 13:39:08

标签: sql sql-server

我知道此查询会返回包含white的所有行:

SELECT COUNT(*) FROM MyTable WHERE Title like '%white%'

但是我希望得到像“白玫瑰”这样的行,而不是像“whiterose”。如何编辑该查询以仅包含“白色”作为单个单词?提前谢谢。

5 个答案:

答案 0 :(得分:3)

通过在两侧找到带空格字符的单词来尝试此操作。

SELECT COUNT(*) FROM MyTable WHERE ' ' + Title + ' ' like '% white %'

在双方的标题上添加空格是为了涵盖单词出现在字符串开头或结尾的情况。

答案 1 :(得分:3)

其他答案不考虑标点符号。

DECLARE @Table TABLE (
    Title NVARCHAR(4000)
)

INSERT INTO @Table (Title) SELECT 'White Christmas was a song.'
INSERT INTO @Table (Title) SELECT 'I''m dreaming of a white Christmas.'
INSERT INTO @Table (Title) SELECT 'The snow was white.'
INSERT INTO @Table (Title) SELECT 'Whitewolves are dangerous.'
INSERT INTO @Table (Title) SELECT 'Snowwhite was a female.'


SELECT *
FROM (
    SELECT Title FROM @Table
    WHERE Title LIKE '%white%'
) match
WHERE Title NOT LIKE '%white[a-z]%'
AND Title NOT LIKE '%[a-z]white%'

答案 2 :(得分:1)

假设单词用空格分隔,你可以这样做:

WHERE ' ' + Title + ' ' like '% white %'

或者,您可能需要全文搜索功能。

答案 3 :(得分:0)

我想要的是,我认为:

SELECT COUNT(*)
FROM MyTable
WHERE Title like '% white %'
  OR Title like '% white'
  OR Title like 'white %';

答案 4 :(得分:0)

包括标点符号,正如Ghost所指出的那样:

select title 
from t
where ' '+title+' ' like '%[^a-z]white[^a-z]%'

rextester演示:http://rextester.com/DBVH10759

create table t (title varchar(32));
insert into t values
 ('white')
,('whiteboard')
,('offwhite')
,('white house')
,('something white.')

select title 
from t
where ' '+title+' ' like '%[^a-z]white[^a-z]%'

返回

+------------------+
|      title       |
+------------------+
| white            |
| white house      |
| something white. |
+------------------+