【问题标题】:Multiple Replace issue多次更换问题
【发布时间】:2016-11-01 07:03:02
【问题描述】:

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

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-ü81

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

【问题讨论】:

  • THX jarlh。但它必须是:Vorschweißfl。 --> 在 "And another row:" 因为 ß 有效!
  • 听起来可能是排序规则问题。
  • 现在我尝试了 # 而不是 ± --> 但它是 70°°5°
  • 而且我还尝试更改替换语句的顺序 --> 没有效果...
  • 您的排序规则似乎无法区分 705 之间的两个不同字符。它对他们俩一视同仁。

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


【解决方案1】:

这应该可以解决问题:

,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]

【讨论】:

    【解决方案2】:

    现在我有一个可行的解决方案:

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

    当我使用Codepage = 'ACP' 时,txt-String 以 1:1 的比例出现在我的 SQL 表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2017-10-05
      • 1970-01-01
      • 2011-04-27
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多