如何查找与下表中某些序列匹配的记录:
Window
如何按照以下模式获取记录
答案 0 :(得分:2)
下面的代码会将您的数据转换为网站访问列表(ID),然后是表示访问过的网页的单个字符串(例如" abbbcd")。
SELECT t2.id, max(tasks) as tasks from
(
SELECT t1.id,
(SELECT '' + Task FROM [Table] WHERE id = t1.id ORDER BY s_Id FOR XML PATH('')) AS tasks
from [Table] t1
) t2
group by t2.id
所以问题现在减少到搜索字符模式:a - 任意数量的b - s - c。您可以使用LIKE执行此操作:
SELECT *
FROM (
SELECT t2.id, max(tasks) as tasks from
(
SELECT t1.id,
(SELECT '' + Task FROM [Table] WHERE id = t1.id ORDER BY s_Id FOR XML PATH('')) AS tasks
from [Table] t1
) t2
group by t2.id
) t3
WHERE t3.tasks LIKE '%abc%'
OR t3.tasks LIKE '%abbc%'
OR t3.tasks LIKE '%abbbc%'
OR t3.tasks LIKE '%abbbbc%';
这有点粗糙。你想说任意数量的b,但LIKE不支持。这是正则表达式(RegEx)通常用于的。表达式为" ab + c"代表:" a"接着是一个或多个" b" s,然后是" c"。
不幸的是,SQL Server不支持regex(Oracle确实如此),所以你必须使用CLR来实现它。其他人已为您完成此操作,因此您可以按照此处的说明进行安装:https://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/