日期:2014-05-18 浏览次数:20799 次
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Text.RegularExpressions
Partial Public Class StoredProcedures
<SqlFunction()> _
Public Shared Function regexes(ByVal expression As SqlString) As SqlString
Dim regex As Regex = New Regex(" ") ' Split on hyphens.
'Dim substrings() As String = regex.Split("plum * pear * BALL")
Dim substrings() As String = regex.Split(expression)
Dim c As String = vbNullString
For Each match As String In substrings
If match = "*" Then '匹配有通配符才转换
match = ".*"
End If
c += match & " "
Next
Dim c1 As String = c.Trim(" ") 'Trim截去前后不必要的
Dim regex1 As String = c1
Return regex1 '返回值相当于 regexes = pattern
End Function
<SqlFunction()> _
Public Shared Function regexismatch(ByVal input As SqlString, ByVal pattern As SqlString) As SqlBoolean
If input.IsNull OrElse pattern.IsNull Then
Return False
End If
Return Regex.IsMatch(input.Value, pattern.Value)
End Function
<SqlFunction()> _
Public Shared Function regexmatch(ByVal input As SqlString, ByVal pattern As SqlString) As SqlString
If input.IsNull OrElse pattern.IsNull Then
End If
Dim inputx As String = input
Dim patternx As String = pattern
Dim m As Match = Regex.Match(inputx, patternx)
If m.Success Then
Return input
Else
Return False
End If
End Function
End Class
--我本地没有vs环境,我用两个函数先代替一下,就是个思路问题。
/*
create function dbo.regexes (@p varchar(4))
returns varchar(10)
as
begin
return @p+'a'
end
go
create function dbo.regexmatch(@a varchar(10),@b varchar(10))
returns varchar(10)
as
begin
return @a+@b
end
*/
--上面两个函数就是两个函数,没有实际意义,就是为了我本地能够正常运行。
--假设这是你的aiml2的数据
declare @aiml2 table (pattern varchar(2))
insert into @aiml2
select 'a1' union all
select 'b1' union all
select 'c1' union all
select 'd1'
--你现在的实现方式
declare @regex varchar(max)
select @regex = dbo.regexes(pattern) from @aiml2
select @regex
declare @input varchar(max) set @input='ok ONES'
select dbo.regexmatch(@input,@regex)
--你现在的结果,只处理了一行
/*
ok ONESd1a
*/
--应该是这样的,不用@t也是可以的。
declare @input1 varchar(max) set @input1='ok ONES'
select dbo.regexmatch(@input1,dbo.regexes(pattern)) from @aiml2
/*
ok ONESa1a
ok ONESb1a
ok ONESc1a
ok ONESd1a
*/