SQL服务器字符串解析为特殊字符
问题描述:
我需要一个解决方案(T-SQL函数/过程)来解析SQL Server的VARCHAR(max)和消除所有特殊字符和口音SQL服务器字符串解析为特殊字符
此字符串的输出将被改造转换为CSV文件,使用AWK脚本打破特殊字符(如'&', '%', '\'
)和转换为未知字符的所有重音字符(如français
中的ç
),这就是为什么我需要此解析器。
谢谢
答
如果我得到你的权利:
SELECT REPLACE('abc&de','&','_')
答
你可以试试这个:
CREATE TABLE dbo.Bad_ASCII_Characters (ascii_char CHAR(1) NOT NULL)
DECLARE @i INT
SET @i = 1
WHILE @i <= 255
BEGIN
IF (@i <> 32) AND
(@i NOT BETWEEN 48 AND 57) AND
(@i NOT BETWEEN 65 AND 90) AND
(@i NOT BETWEEN 97 AND 122)
BEGIN
INSERT INTO dbo.Bad_ASCII_Characters (ascii_char) VALUES(CHAR(@i))
END
SET @i = @i + 1
END
DECLARE @row_count INT
SET @row_count = 1
WHILE (@row_count > 0)
BEGIN
UPDATE T
SET my_column = REPLACE(my_column, ascii_char, '')
FROM My_Table T
INNER JOIN dbo.Bad_ASCII_Characters BAC ON
T.my_column LIKE '%' + BAC.ascii_char + '%'
SET @row_count = @@ROWCOUNT
END
我没有测试过,所以你可能需要调整它位。您可以随时生成表格,也可以将其保留在此处,如果需求略有变化(例如,您发现某些字符可以正确解析),则可以更改表格中的数据。
更新周围的WHILE循环可防止某些列包含多个特殊字符。如果你的桌子很大,你可能会在这里看到一些性能问题。
当然,但这意味着我必须搜索脚本会破坏的所有字符,您是否至少可以给我一个可以使用SQL的替换函数的字符列表? 或其他一些方法,至少摆脱我的字符串中的所有重音字符..就像切换整理和消除未知字符? – Paul 2010-01-26 11:14:24
另外,REPLACE SQL函数不区分大小写,如果我选择'replace'('Montréalis nicE','é','e')'',那么输出结果是蒙特利尔很好,因此它将E计算为一个'é' – Paul 2010-01-26 11:42:38
啊,好吧,找到你了。我猜你只想在你的结果中使用a-z,A-Z和0-9?你应该使用正则表达式,但SQL Server不支持nativeley。如果它必须用t-sql完成,也许这是有效的:http://www.sqlteam.com/article/regular-expressions-in-t-sql 未经我自己测试,但看起来像它可以工作。 – Steffen 2010-01-26 20:44:44