我正在寻找一个函数,将能够做与TSQL函数的MySQL相同的事情。基本上,我需要我的查询看起来像下面这样:
SELECT * FROM Routing WHERE (@Message REGEX RouteRegex);在这一点上我并不热衷于使用CLR。
有什么想法吗?
发布于 2009-06-08 14:05:21
此链接是一篇关于通过服务器上的VBScript.Regex库编写正则表达式的文章:http://www.sqlteam.com/article/regular-expressions-in-t-sql
它通过OLE Automation与Regex库通信,默认情况下该库处于关闭状态,因为它存在安全风险。
我的意见是使用Regex via the CLR。
发布于 2009-06-08 14:11:58
LFSR关于CLR的说法是正确的。Go for CLR,但下面的函数也运行得很好。当LFSR发布上面的答案时,我正在测试代码。
CREATE FUNCTION dbo.find_regular_expression
(
@source varchar(5000),
@regexp varchar(1000),
@ignorecase bit = 0
)
RETURNS bit
AS
BEGIN
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @objMatches integer
DECLARE @objMatch integer
DECLARE @count integer
DECLARE @results bit
EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
RETURN @results
END发布于 2009-06-08 14:15:35
我认为PATINDEX是最接近原生t-sql的。
http://msdn.microsoft.com/en-us/library/ms188395.aspx
另请参阅
http://msdn.microsoft.com/en-us/library/ms187489.aspx
https://stackoverflow.com/questions/965026
复制相似问题