如何将此正则表达式转换为like子句

时间:2011-08-25 16:36:51

标签: sql regex sql-server-2005

我有一个存储过程,其中一个步骤是删除与模式匹配的项目

--Remove the databases to exclude
DELETE t
FROM #WhichDatabase t 
WHERE t.dbName like @dbExclude

但是我想要使用的模式是(在Regex中)

^(chgTRK_.*)|(.*_Play)$

如何实现传递一个字符串并解析复杂过滤器的相同目标?我知道我可以做like 'chgTRK[_]%' or like '%[_]Play'但我受到限制,因为这是一个存储过程,并且过滤器不会总是有两个部分。

3 个答案:

答案 0 :(得分:3)

使用表值参数(SQL Server 2008)或CSV / XML / Temp表(SQL Server 2005及更早版本)传入搜索词。

有关详情,请参阅"Arrays and Lists in SQL Server 2005 and Beyond" 权威文章)

假设您现在已经使用列dbExclude

加载@DeleteConditions(表变量)
DELETE t
FROM
    #WhichDatabase t 
    JOIN
    @DeleteConditions d ON t.dbName like dbExclude

答案 1 :(得分:0)

Dani的评论给了我一个想法,一个解决方案可能是制作一个CLR用户定义的函数来使sql支持Regex。

可以找到关于如何制作它的教程here

答案 2 :(得分:0)

由于您正在编写存储过程,因此可以将用作输入的字符串循环(尽管表输入会更好)并对每个模式执行删除操作。