完全匹配参数的搜索查询

时间:2017-04-20 07:58:56

标签: sql sql-server tsql

让我们将下表视为一个例子

表 - 科目

ID     | subject
------ | ---------------
1      | maths, science
2      | maths, science, english
3      | english, computer

查询

SELECT * FROM subjects WHERE subject LIKE '%maths%' AND subject LIKE '%science%'

当我在上面运行查询时,输出结果如下

ID     | subject
------ | ---------------
1      | maths, science
2      | maths, science, english

我的问题:

是否可以修改上面的查询以获得与搜索完全匹配的以下结果到两个参数,即使搜索的顺序发生了变化 即

SELECT * FROM subjects WHERE subject LIKE '%science%' AND subject LIKE '%maths%'

期望的结果:

ID     | subject
------ | ---------------
1      | maths, science

2 个答案:

答案 0 :(得分:1)

这个数据库设计不好,使用关联表而不是逗号分隔列表。

您可以使用LEN检查subject中除指定值之外是否还有其他内容。

SELECT * FROM subjects WHERE subject LIKE '%science%' AND subject LIKE '%maths%' 
                         AND LEN(subject) <= LEN('maths, science')

答案 1 :(得分:1)

只需使用CHARINDEX()即可获得相同的结果,因为它会检查是否存在,您可以使用它强制执行订单。

SELECT * 
FROM subjects 
WHERE CHARINDEX('maths', subject, 0) < CHARINDEX('science', subject, 0) -- enforces order
    AND CHARINDEX('maths', subject, 0) > 0 -- to make sure that your "first word" exists