多次替换问题

时间:2016-06-29 13:57:38

标签: sql sql-server tsql replace sql-server-2008-r2

我从File.txt进行了批量导入。在导入之后,其中一列具有以下文本:

30 x 1,5 mm, O-Ring, EPDM, 70░▒5░ Shore A, schwarz, Tol. nach ISO 3601

但必须是:

30 x 1,5 mm, O-Ring, EPDM, 70°±5° Shore A, schwarz, Tol. nach ISO 3601

我想使用多重替换,如下所示:

,ISNULL(REPLACE(REPLACE(REPLACE([ARTTXT], '░', '°'), '▒', '±'), '▀', 'ß'), '') AS [ARTTXT]

但后来我得到了:

30 x 1,5 mm, O-Ring, EPDM, 70°°5° Shore A, schwarz, Tol. nach ISO 3601

另一行:

Spritzschutz-Ring SRP, Typ SS, DN 25, PP, rot, PN 10-40 f³r Flanschverb. aus 2 Vorschweißfl. EN 1092-1 Fom B,

因此,您看到°ß工作,但±没有。

为什么呢?我正在使用SQL Server 2008 R2。

谢谢。

Greetz Vegeta_77

更新: @Damien_The_Unbeliever 使用NVARCHAR要好得多。有用!但最后我有问题:

...mittelgr³n - >应该是mittelgrün 所以我的替换是:

REPLACE([ARTTXT], N'³', N'ü')

所以mittelgrün的作品。但我也在替换: 2-381 - > 2-U81

为什么呢?替换不是......,N'3','ü'

2 个答案:

答案 0 :(得分:0)

这应解决问题:

,ISNULL(REPLACE(REPLACE(REPLACE([ARTTXT], nchar(9617), '°'), nchar(9618), '±'), nchar(9600), 'ß'), '') AS [ARTTXT]

问题是,所提到的字符 - 如果转换为ascii - 都会产生相同的结果。但是,使用unicode会产生正确的字符。这里的例子是:

SELECT ISNULL(REPLACE(REPLACE(REPLACE(N'30 x 1,5 mm, O-Ring, EPDM, 70░▒5░ Shore A, schwarz, Tol. nach ISO 3601', nchar(9617), '°'), nchar(9618), '±'), nchar(9600), 'ß'), '') AS [ARTTXT]

答案 1 :(得分:0)

现在我有了一个有效的解决方案:

WITH
(
    CODEPAGE = 'ACP',
    FIELDTERMINATOR = '|',
    ROWTERMINATOR = '\n'
)

当我使用Codepage = 'ACP'时,txt-String以1:1的比例进入我的SQL表。