CREATE FUNCTION [dbo].[RegexReplace] ( @string VARCHAR(MAX), --被替换的字符串 @pattern VARCHAR(255), --替换模板 @replacestr VARCHAR(255), --替换后的字符串 @IgnoreCase INT = 0 --0区分大小写 1不区分大小写 ) RETURNS VARCHAR(8000) AS BEGIN DECLARE @objRegex INT, @retstr VARCHAR(8000) --创建对象 EXEC sp_OACreate ‘VBScript.RegExp‘, @objRegex OUT --设置属性 EXEC sp_OASetProperty @objRegex, ‘Pattern‘, @pattern EXEC sp_OASetProperty @objRegex, ‘IgnoreCase‘, @IgnoreCase EXEC sp_OASetProperty @objRegex, ‘Global‘, 1 --执行 EXEC sp_OAMethod @objRegex, ‘Replace‘, @retstr OUT, @string, @replacestr --释放 EXECUTE sp_OADestroy @objRegex RETURN @retstr END ----保证正常运行的话,需要将Ole Automation Procedures选项置为1 --EXEC sp_configure ‘show advanced options‘, 1 --RECONFIGURE WITH OVERRIDE --EXEC sp_configure ‘Ole Automation Procedures‘, 1 --RECONFIGURE WITH OVERRIDE --匹配字符串‘\b字符串‘ --匹配html/XMl‘\<[^<>]*\>‘ --匹配ASCII码‘[\x01-\x3f]‘ 注意这里过滤了所有ASCII码的特殊符号包括?()等根据需求可以自己调节, --SELECT ASCII(‘ ‘) 用于查找特殊符号的ASCII值 --SELECT CHAR(0x03) 用于显示特殊符号 GO
CREATE FUNCTION [dbo].[去除乱码] ( @str NVARCHAR(100) ) RETURNS VARCHAR(100) AS BEGIN RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@str, NCHAR(0x00), ‘‘), NCHAR(0x01), ‘‘), NCHAR(0x02), ‘‘), NCHAR(0x03), ‘‘), NCHAR(0x04), ‘‘), NCHAR(0x05), ‘‘), NCHAR(0x06), ‘‘), NCHAR(0x07), ‘‘), NCHAR(0x08), ‘‘), NCHAR(0x0b), ‘‘), NCHAR(0x0c), ‘‘), NCHAR(0x0e), ‘‘), NCHAR(0x0f), ‘‘), NCHAR(0x10), ‘‘), NCHAR(0x11), ‘‘), NCHAR(0x12), ‘‘), NCHAR(0x13), ‘‘), NCHAR(0x14), ‘‘), NCHAR(0x15), ‘‘), NCHAR(0x16), ‘‘), NCHAR(0x17), ‘‘), NCHAR(0x18), ‘‘), NCHAR(0x19), ‘‘), NCHAR(0x1A), ‘‘), NCHAR(0x1B), ‘‘), NCHAR(0x1C), ‘‘), NCHAR(0x1D), ‘‘), NCHAR(0x1E), ‘‘), NCHAR(0x1F), ‘‘), NCHAR(10), ‘‘), NCHAR(32), ‘‘), NCHAR(13), ‘‘), NCHAR(9), ‘‘); END; GO
以上是二种去除数据中乱码的方式可以根据需求自己更改,第一中利用增则表达式的匹配区间并且需要开启额外功能(sp_OAcreate功能相当强大可以开启SQL server调用Web Service),第二种是针对个例的,下面是测试脚本
SELECT dbo.RegexReplace( ‘成都市武侯0H倎× (? 4普陀区甘泉街道甘泉路241弄25号302室 0‘,‘[\x01-\x20]‘,‘‘,0); SELECT dbo.去除乱码( ‘成都市武侯0H倎× (? 4普陀区甘泉街道甘泉路241弄25号302室 0‘); SELECT ASCII(‘ ‘) SELECT CHAR(0x03)
另外,摘自网上的SQL Server基本的正则表达式用法例子
CREATE FUNCTION [dbo].[提取汉字] ( @S NVARCHAR(100) ) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX(‘%[^吖-座]%‘, @S) > 0 SET @S = STUFF(@S, PATINDEX(‘%[^吖-座]%‘, @S), 1, N‘‘); RETURN @S; END; GO CREATE FUNCTION [dbo].[提取数字] ( @S VARCHAR(100) ) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX(‘%[^0-9]%‘, @S) > 0 BEGIN SET @S = STUFF(@S, PATINDEX(‘%[^0-9]%‘, @S), 1, ‘‘); END; RETURN @S; END; GO GO CREATE FUNCTION [dbo].[提取字母] ( @S VARCHAR(100) ) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX(‘%[^a-z]%‘, @S) > 0 BEGIN SET @S = STUFF(@S, PATINDEX(‘%[^a-z]%‘, @S), 1, ‘‘); END; RETURN @S; END;
* 正则表达式符号^在SQL server中在[]外不是匹配第一个字符,这个与一般正则表达式有所区别,一般正则表达式^[0-9]意思是匹配第一个是0-9的数字,[^0-9]匹配不是0-9的数字
原文地址:https://www.cnblogs.com/wangboke/p/9267413.html
时间: 2024-10-12 21:25:44