zoukankan      html  css  js  c++  java
  • 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
    --匹配字符串'字符串'
    --匹配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

  • 相关阅读:
    CenterNet-TensorRT错误记录
    NAS研究要点分析
    conda如何安装从源下载的离线安装包
    Xavier上pytorch半精度inference问题
    Xavier 使用便携程序
    Xavier疑问
    Python输入(Leetcode
    兴趣爱好
    生活目标
    TX2装机教程
  • 原文地址:https://www.cnblogs.com/wangboke/p/9267413.html
Copyright © 2011-2022 走看看