以前处理单引号都是对每个参数进行逐个替换 replace("'","''"),感觉比较麻烦现在想在SQL语句组合完后,利用正则直接替换组合完毕的SQL语句,岂不是很方便也搜索了这方面的资料,找到了一个C#下的正则,没环境,不知道能不能用,现在想要个普通的正则,不知道能不能实现思索许久,无果直接上个复杂的吧比如把下面的SQL语句:
select * from [test] where [text1] like '% a ' , % ' . b ' c %' and [text2]=' a ' , % ' . b ' c 'insert into [test]([text1],[text2]) values (' a ' , % ' . b ' c ',' a ' , % ' . b ' c ')
替换成:
select * from [test] where [text1] like '% a '' , % '' . b '' c %' and [text2]=' a ' , % ' . b ' c 'insert into [test]([text1],[text2]) values (' a '' , % '' . b '' c ',' a '' , % '' . b '' c ')
红色标注的单引号是SQL的标识符,其它单引号统统替换成双引号,貌似有点复杂了。还请高人指点
select * from [test] where [text1] like '% a ' , % ' . b ' c %' and [text2]=' a ' , % ' . b ' c 'insert into [test]([text1],[text2]) values (' a ' , % ' . b ' c ',' a ' , % ' . b ' c ')
替换成:
select * from [test] where [text1] like '% a '' , % '' . b '' c %' and [text2]=' a ' , % ' . b ' c 'insert into [test]([text1],[text2]) values (' a '' , % '' . b '' c ',' a '' , % '' . b '' c ')
红色标注的单引号是SQL的标识符,其它单引号统统替换成双引号,貌似有点复杂了。还请高人指点
create function dbo.regexReplace
(
@source varchar(5000), --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 0, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
endreturn @result
end
GO--调用
create table t
(col varchar(50))insert t
select '12ABCDEFG34' union all
select 'A1B2C3' union all
select 'DDKFDK34KD23'
select cast(dbo.regexReplace(col,'[^0-9]','',1,1) as varchar(30)) as col from tdrop table t
drop function dbo.regexReplacecol
------------------------------
1234
123
3423(所影响的行数为 3 行)
我只需要正则表达式,不一定要SQL Server去处理
如何正則???
搞不明白SQL Server自己是怎么识别SQL语句的,哎,真的没办法吗???