【发布时间】:2019-11-06 17:46:12
【问题描述】:
我有一个查询,我试图对声明变量的每个值进行 LIKE 搜索,而不是对整个字段值/字符串进行类似搜索。
示例:
DECLARE @name VARCHAR(30)
SET @name = 'John Smith'
SELECT name FROM customers WHERE name like '%'+ @name + '%'
我要找的唱片是“John and Jane Smith”。上面的查询返回 NO 结果。如果用户仅搜索“John”或仅搜索“Smith”,则返回的结果太多。
我正在尝试让查询像下面的查询一样进行搜索:
SELECT name from customers WHERE name LIKE '%John% %Smith%'
我已经搜索了很多选项,但不确定我的搜索词是否不正确,我还没有找到解决方案。
【问题讨论】:
-
您最好使用 FTS,而不是创建带有 LIKE 子句的查询,其中前导和尾随字符是通配符。也就是说,除非术语的顺序很重要,否则您想要的结果将是
SELECT name from customers WHERE name LIKE '%John%' AND name LIKE '%Smith%'。 -
我的第一个选择是使用 CONTAINS 但在此表上没有全文索引。我也想不到。
-
伊戈尔,我也可以用这个对吗? SELECT name from customers WHERE name LIKE '%John% %Smith%' 以获得相同的结果?
-
否,结果可能因输入而异。如果名称被输入/存储为姓氏,则您的查询不会拉回任何名字,但我的名字会。此外,您的查询要求字段中的 2 个名称之间有一个空格。
-
是的,但这并不意味着它应该;来自为这样的公司工作的人,他们设计了这样的系统,并迅速向他们展示了为什么这是一个坏主意。因为他们问的正是你的问题类型,而且
'John Smith' != 'John and Jane Smith'
标签: sql sql-server variables sql-like declare