如何找到以任何顺序与搜索词匹配的行?
如果搜索是“1234”
匹配发现像“1234”,“4321”,“2314”,“3412”
但不包括“12345”,“123”,“2214”
=============================================== =========================
正如克里斯提到的,我认为使用LEN(table.search)很有帮助。
搜索词可以是任何东西,预期结果(我希望得到)应该是相同数量的字符,但每个字符可以是任何顺序。
例如,如果搜索词是“abc1dx”,则
结果可以包括“abc1dx”,“1abcdx”,“xd1abc”,“dxabc1”。
但是不应该包括像“abc1dx1”,“aac1dx”这样的词语
答案 0 :(得分:1)
一种选择是必须拥有包含所有这些排列的WHERE
子句。
例如
SELECT * FROM table WHERE
table.search='1234' OR
table.search='4321' OR
table.search='1423' ...
etc
正如你所看到的,你将会有一个相当大的查询;事实上,随着搜索词长度的增长,它会大得多。 这是一种不好的方式。
另一个选项可能是查询以查找带有LIKE查询的任何字符的结果以及长度匹配的位置:
SELECT * from table WHERE
table.search LIKE '%1%' AND
table.search LIKE '%2%' AND
table.search LIKE '%3%' AND
table.search LIKE '%4%' AND
LEN(table.search) = 4
这是更好的,只要您的搜索字词中没有任何重复值(如“12321”)就可以了 - 它会遇到问题。
正如评论中指出的那样,你可能最好只做一个更通用的查询并使用不同的技术来获得匹配。