【发布时间】:2017-05-17 23:21:08
【问题描述】:
我正在尝试编写一个 SQL 查询,该查询将搜索以检查所有关键字是否存在于多个列中。关键字可以包含通配符,例如“%”来表示任何字符串。
例如
first_name | last_name | age | height | mother's name
-------------------------------------------------------
mary | jones | 19 | 170 | sally jane
john | doe | 43 | 165 | sarah connor
john | connor | 17 | 173 | sarah connor
joe | bloe | 32 | 173 | sarah connor
john | connor | 32 | 165 | sarah connor
如果我搜索“jo% %connor%”,我需要找到至少一列包含“jo%”且至少一列包含“%connor%”的所有行,并且我需要确保所有的关键字至少匹配一列。
我无法在表格上使用全文搜索。而且我认为我不能只连接所有列并检查它是否包含所有单词,因为搜索词中的通配符可能表明单词的开头必须以 jo 开头。
有没有在 SQL Server 2012 中进行这种搜索而不更改表属性等的好方法?
【问题讨论】:
-
如果 first_name 是 'mary' 而 last_name 是 'joconnor' 会发生什么?这是一场比赛吗?它验证 'jo%' 和 '%connor%' 但它是同一列。
-
没有。空格将分隔单词
-
必须是通配符搜索吗?如果没有,你可以做一个 OR 如果你有有限数量的列
-
@searchString like col1+col2+col3+Col4+Col5 OR @searchString like Col2+Col1+Col3+Col4+Col5 OR @searchString like Col3+Col1+Col2+Col4+Col5 OR ...每次在 bigining 时只置换一列 -
但是我怎么知道所有的关键词都被找到了呢?是的,它必须能够进行通配符搜索
标签: sql sql-server sql-server-2012