SQL Server亂碼處理(ASCII)

來源:互聯網
上載者:User

標籤:rri   更改   sel   vbs   proc   set   匹配   server   ret   

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基本的Regex用法例子

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;GOCREATE 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;GOGOCREATE 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;

  * Regex符號^在SQL server中在[]外不是匹配第一個字元,這個與一般Regex有所區別,一般Regex^[0-9]意思是匹配第一個是0-9的數字,[^0-9]匹配不是0-9的數字

SQL Server亂碼處理(ASCII)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.