SQL Server亂碼處理(ASCII)


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的數字

       *SQL Server訪問Web Service學習連接:https://www.cnblogs.com/davidhou/p/5868136.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM