如果您必须在 RDBMS 中完成所有操作,那么UDF将是最好的选择。
否则,您可以使用此技术至少使用PARSENAME分别对前四个单词进行 soundex :
从如何拆分字符串以便可以访问项目 x?:
PARSENAME(REPLACE('12 inches laptop computer', ' ', '.'), 1) --return computer
PARSENAME(REPLACE('12 inches laptop computer', ' ', '.'), 2) --return laptop
...
但是:以这种方式使用 PARSENAME 是一种 hack,一个严重的限制是它最多只能用于 4 个部分。如果有 5 个或更多单词 PARSENAME 将返回 NULL,因此您必须使用条件检查并优雅地降级。
这是一个简化的示例(同样,没有 NULL 检查)
SELECT *
FROM Products
WHERE SOUNDEX(search_input) = SOUNDEX(PARSENAME(REPLACE(Name, ' ', '.'), 4))
OR SOUNDEX(search_input) = SOUNDEX(PARSENAME(REPLACE(Name, ' ', '.'), 3))
OR SOUNDEX(search_input) = SOUNDEX(PARSENAME(REPLACE(Name, ' ', '.'), 2))
OR SOUNDEX(search_input) = SOUNDEX(PARSENAME(REPLACE(Name, ' ', '.'), 1))