Joh*_*ohn 5 sql-server collation substring
子句LIKE
可以测试某个字符串是否出现在另一个字符串中,并且该CHARINDEX
函数可以给出第一个匹配的开始位置。
就我而言,我对结束位置感兴趣,由于排序规则的复杂性,它无法从开始位置推导出来。例如,在德语排序规则 ( German_PhoneBook_100_CI_AS_SC_UTF8
) 中,
h\xc3\xa4
出现在 'H\xc3\xa4ger' 的位置 1 处,结束于位置 2 处h\xc3\xa4
出现在“Haeger”中的位置 1 并结束于位置 3。这样做的问题是为了用户的利益标记搜索结果文本的匹配部分。
\n我一直在考虑反转字符串,但我仍然只能得到第一个匹配项CHARINDEX
,在反转的情况下我需要最后一个匹配项。
有人有什么想法吗?
\n以下是一个新的尝试,我相信它是有效的,但比这个答案中发布的第一个尝试要黑客得多。
\n基于使用的想法replace
,但必须处理replace
替换所有而不仅仅是第一次出现的事实,我现在将匹配项替换为包含可识别分隔符的内容,我可以使用该分隔符找到它charindex
分隔其余部分。然后我可以删除其余部分并查看其余部分的长度。
然而,让我们做出以下假设,让我们的生活变得更轻松一些,即使有这些限制,它也会变得足够复杂:
\n首先,这是一个编程版本:
\ndeclare @sep char(1) = \'|\'\ndeclare @source varchar(60) = \'haegerhae\'\ndeclare @tofind varchar(60) = \'h\xc3\xa4\'\n\ndeclare @helper varchar(61) = concat(@tofind, @sep)\n\ndeclare @temp varchar(60) = replace(@source, @tofind, @helper)\ndeclare @l int = charindex(@sep, @temp, 1)\n\nselect @temp temp, left(@source, @l) [match];\n
Run Code Online (Sandbox Code Playgroud)\n余数显示为hae
,它还通过长度告诉我们结束位置。
这是内联表达式:
\nselect left(@source, charindex(@sep, replace(@source, @tofind, concat(@tofind, @sep)), 1)) [match]\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
830 次 |
最近记录: |