SQL Server字符串解析特殊字符

时间:2010-01-26 11:01:05

标签: sql sql-server tsql parsing

我需要一个解决方案(t-sql函数/过程)来解析SQL Server varchar(max)并消除所有特殊字符和重音

此字符串的输出将使用AWK脚本转换为CSV文件,该脚本会打破'&', '%', '\'等特殊字符,并且转换后的所有重音字符都会转换为未知字符(例如ç中的français {1}})这就是我需要这个解析器的原因。

谢谢

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

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循环是为了防止某些列包含多个特殊字符。如果您的表格非常大,您可能会在这里看到一些性能问题。

答案 1 :(得分:0)

如果我说对了你的话:

SELECT REPLACE('abc&de','&','_')