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

原文地址:https://www.cnblogs.com/wangboke/p/9267413.html

时间: 2024-10-12 21:25:44

SQL Server乱码处理(ASCII)的相关文章

python链接sql server 乱码问题

import pymssql import sys import os reload(sys) sys.setdefaultencoding('utf-8') os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' class MSSQL: 原文地址:https://www.cnblogs.com/whatarey/p/10199081.html

SQL Server插入中文数据后出现乱码

原文:SQL Server插入中文数据后出现乱码 今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [dbo].[Type](  [TypeId] INT NOT NULL PRIMARY KEY,     [TypeName] NVARCHAR(50)NOT NULL,     [Description] NVARCHAR(255) NULL,     [CategoryId] INT NOT NU

使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题

原文 使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题 最近帮客户写了一个.net商城网站的发布接口,大家都知道.net一般都使用MSSQL数据库,但鱼丸不会.net呀,没办法,只能使用PHP连接SQL Server,然后来发布商品数据.因为客户采集的英文网站,但是要求发布时翻译成德语,发布完了,结果发现标题内容这些地方有乱码,在网上找了大半天,也试了很多种方法,结果使用SQLSRV解决了问题! 官方网址:http://msdn.microsoft.com

Informatica抽取SQL Server数据库乱码

1.首先确认数据库的关系连接所使用的代码页,是否一致 2.如果上述方法不行,在Designer中更改数据类型,将string类型改为nstring类型,中文就没有乱码了 3.SQL Server数据库中类型为text到Oracle中类型为CLOB需要在源端将类型改为ntext,在转换组件中转换成ntext发现还是乱码. 原文地址:https://www.cnblogs.com/langgj/p/9212218.html

pgspider tds fdw sql server docker 镜像中文乱码问题解决

以下说明几个中文乱码的问题: 在直接使用linux sql server 因为默认为英文,所以会有中文编码的问题 因为系统使用freetds 配置问题(默认会结合操作系统进行语言处理,还有就是配置文件) 几种解决方法 修改docker 运行配置 version: "3" services:  pg-tds:    image: dalongrong/pgspider:tds    ports:      - "5432:5432"    environment:  

SQL Server 记录(更新中...)

sys.databases 显示所有数据库信息 sys.tables 显示当前数据库所有的表的信息 Go 向 SQL Server 实用工具发出一批 Transact-SQL 语句已结束的信号,Go本身不是T-SQL语句 sq_addrole 等等 SQL Server 系统存储过程以字符 sp_ 开头. EXEC或EXECUTE 执行 Transact-SQL 批处理中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.CLR 存储过程.标量值用户定义函数或扩展存储过程.

SQL SERVER的数据类型(转载)

SQL SERVER的数据类型 1.SQL SERVER的数据类型 数据类型是数据的一种属性,表示数据所表示信息的类型.任何一种计算机语言都定义了自己的数据类型.当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同.SQLServer 提供了 25 种数据类型: ·Binary [(n)] ·Varbinary [(n)] ·Char [(n)] ·Varchar[(n)] ·Nchar[(n)] ·Nvarchar[(n)] ·Datetime ·Smallda

Sql server bulk insert文本文件插入到数据库

Bulk Insert Sql server 的bulk insert语句可以高效的导入大数据量的平面文件(txt,csv文件)到数据库的一张表中,其用法如下: bulk insert test from 'f:\test.txt' with (fieldterminator=',', rowterminator='\n') 其中"test"是数据库表的名字,"f:\test.txt"是导入平面文件的地址,fieldterminator指定平面文件中列的分隔符是什么

SQL Server获取下一个编码字符串的实现方案分割和进位

我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方案的,后一种方案虽然解决了其中方案的缺点,但是依然存在的编码字符串长度的限制(最多满足8位长度),本博文提供的方案将编码字符串长度增加到19位,也可以足够项目中实现这些编码. 具体的编码规则可以参看以上两种解决方案博文中的描述,也可以进入SQL Server 大V潇湘隐者的获取下一个编码字符串问题这篇博文.