SQL Server如何提取字符串中最后出现的匹配颜色值
SQL Server 2017 提取字符串末尾匹配颜色实现方案
你可以通过计算每个匹配颜色在字符串中的出现位置,按位置倒序排序后取第一条即可获得最后出现的颜色值,实现代码如下:
首先是匹配单条测试字符串的示例:
SELECT TOP 1 color FROM (VALUES ('Dove'), ('Frost')) t(Color) WHERE 'jgkgh FROST tohjgkhg DOVE gfsgfgs' LIKE CONCAT('%', t.Color, '%') AND t.Color IS NOT NULL -- 按颜色出现位置倒序,位置越大说明出现越晚 ORDER BY CHARINDEX(t.Color, 'jgkgh FROST tohjgkhg DOVE gfsgfgs') DESC
如果需要兼容同个颜色多次出现的场景,精确计算颜色最后一次出现的位置,适配数据表批量查询的写法如下:
SELECT t_main.ID, t_main.Description, last_color.Color FROM 你的数据表名 t_main CROSS APPLY ( SELECT TOP 1 c.Color -- 此处可替换为独立的颜色字典表查询 FROM (VALUES ('Dove'), ('Frost')) c(Color) WHERE t_main.Description LIKE CONCAT('%', c.Color, '%') AND c.Color IS NOT NULL -- 计算颜色最后一次出现的位置,倒序排序 ORDER BY LEN(t_main.Description) - CHARINDEX(REVERSE(c.Color), REVERSE(t_main.Description)) + 1 DESC ) last_color
补充说明:
- 如果颜色值数量较多,建议单独维护一张颜色字典表,替换代码中的
(VALUES ('Dove'), ('Frost'))子查询即可,维护更方便 - 如果你使用的排序规则是大小写敏感的,可以将匹配逻辑和位置计算逻辑中的字段统一转为大写或小写,保证匹配结果和预期一致
内容的提问来源于stack exchange,提问作者Discover
相关产品推荐
相关产品推荐

