一个LIKE
子句可以测试一个字符串是否出现在另一个字符串中,并且该CHARINDEX
函数可以给出第一个匹配项的开始位置。
就我而言,我对结束位置感兴趣,因为排序规则的复杂性,不能从开始位置推导出来。例如,在德语归类 ( German_PhoneBook_100_CI_AS_SC_UTF8
) 中,
hä
出现在位置 1 的“Häger”中并在位置 2 处结束,并且hä
出现在位置 1 的 'Haeger' 中,并在位置 3 结束。
这样做的问题是为用户的利益标记搜索结果文本的匹配部分。
我一直在考虑反转字符串,但是我仍然只能得到第一个匹配项,CHARINDEX
在这种反转的情况下,我需要最后一个匹配项。
有什么想法吗?
以下是我认为可行的新尝试,但比此答案中发布的第一个尝试要复杂得多。
基于使用的想法,但必须处理替换所有而不只是第一次出现
replace
的事实,我现在用包含可识别分隔符的东西替换匹配项,我可以找到它来分隔其余部分。然后我可以删除其余部分并查看剩余部分的长度。replace
charindex
但是,让我们做出以下假设以使我们的生活更轻松一些,即使有这些限制,它也会变得非常复杂:
首先,这是一个程序化版本:
其余部分显示为
hae
,它还通过长度告诉我们结束位置。这是内联表达式:
CHARINDEX 将给出比赛的飞镖。使用 STUFF 插入 @sep。这将打破比赛。一次前进一个位置,直到比赛恢复。这将结束源。
因此,比赛从位置 1 延伸到 3(含)。
如果原始字符串中有多个匹配项,这将在第一次填充 @sep 后显示。在这种情况下,可以从那里截断原件并以这种方式进行搜索。
抱歉,我目前无法清楚地输入此内容。明天吧。希望它仍然有用。