sql中替换多个特殊字符

pingjinzhao 2010-09-28 01:58:34
在数据库中查询结果中包含特殊字符,如 ,特殊字符的类型不可预期可能有很多种,要将这些字符在xml中无法识别,怎样在查询的存储过程中将这些特殊字符过滤掉,replace函数只能一个一个的替换 ,有没有更好的办法
...全文
1290 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pingjinzhao 2010-11-08
通过此函数过滤掉特殊字符
public static string ReplaceLowOrderASCIICharacters(string tmp)
{
StringBuilder info = new StringBuilder();
foreach (char cc in tmp)
{
int ss = (int)cc;
if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
info.AppendFormat(" ", ss);//&#x{0:X};
else info.Append(cc);
}
return info.ToString();
}

回复
SQLCenter 2010-09-28
类似 Wingdings 里面那些符号,和字体有关。
回复
SQLCenter 2010-09-28
这....

貌似不同的字体有不同的形式....

SSMS 里面复制不下来。
回复
feilniu 2010-09-28
[Quote=引用 8 楼 pingjinzhao 的回复:]

引用 5 楼 billpu 的回复:
不是xml不支持,而是你的xml的编码有问题,没有用unicode编码吧

我是用数据库中查询出的数据拼接xml文件的,请问怎么按你说的unicode编码
[/Quote]

上示例代码。
回复
喜-喜 2010-09-28
[Quote=引用 7 楼 wxf163 的回复:]
理论上来说就是建一个 字符表,把你需要替换的字符都插入到这个表中。
然后动态拼字符串替换。
[/Quote]

支持小小菜..
回复
pingjinzhao 2010-09-28
[Quote=引用 5 楼 billpu 的回复:]
不是xml不支持,而是你的xml的编码有问题,没有用unicode编码吧
[/Quote]
我是用数据库中查询出的数据拼接xml文件的,请问怎么按你说的unicode编码
回复
王向飞 2010-09-28
理论上来说就是建一个 字符表,把你需要替换的字符都插入到这个表中。
然后动态拼字符串替换。
回复
王向飞 2010-09-28
CREATE TABLE ErrorMessage ( NA VARCHAR(20))
INSERT INTO ErrorMessage VALUES('')
INSERT INTO ErrorMessage VALUES('★')
INSERT INTO ErrorMessage VALUES('△')
GO


CREATE TABLE Erro ( NA1 VARCHAR(20))
INSERT INTO Erro VALUES('实打实的大★厦')
INSERT INTO Erro VALUES('实打大★厦')
GO


DECLARE @REPLACECMD VARCHAR(2000)='NA1'
SELECT @REPLACECMD ='REPLACE('+ @REPLACECMD+','''+NA+''' ,'''')' FROM ErrorMessage
print @REPLACECMD
DECLARE @SQLCMD VARCHAR(4000)=''
SET @SQLCMD = 'select '+@REPLACECMD+'AS NECOL FROM Erro'
EXEC (@SQLCMD)

--NECOL
实打实的大厦
实打大厦
回复
billpu 2010-09-28
不是xml不支持,而是你的xml的编码有问题,没有用unicode编码吧
回复
zsh0809 2010-09-28
把3#的数字,字母,中文整合到一个函数中就可以了。
回复
ws_hgo 2010-09-28
希望对你有用

-提取数字
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@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
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
--------------------------------------------------------------------
--提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@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
GO
--测试
PRINT DBO.GET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN @S
END
GO
PRINT DBO.CHINA_STR('呵呵ABC123ABC')
GO

回复
billpu 2010-09-28
囧 算吗
回复
billpu 2010-09-28
长见识了 帮顶
回复
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-09-28 01:58
社区公告
暂无公告