【问题标题】:Replace comma between quotes with space用空格替换引号之间的逗号
【发布时间】:2014-10-31 05:50:53
【问题描述】:

你好我的表,其中每一行都有如下数据:

0150566115,"HEALTH 401K","IC,ON","ICON HEALTH 401K",,,1,08/21/2014

我想要的是删除双引号“”之间的每个逗号(,)。然后用逗号(,)分割字符串的其余部分

我不想检查每一个字符设置标志的开始和结束双引号。

我可以实现某种正则表达式吗?

有简单的方法吗?

到目前为止,我尝试的只是以逗号(,)为基础拆分字符串,但它适用于单个双引号块。

    Declare @Query nvarchar(max) 

    Set @Query= 'Item1,Item2,"Item,Demo,3",New'

    Declare @start int, @len int
    SELECT @start = PATINDEX('%"%"%', @Query)+1

    print @start

    select @len=CHARINDEX('"', SUBSTRING(@Query, @start, LEN(@Query)))-1

    select 
        SUBSTRING(@Query, 1, @start - 2) +
        REPLACE((SUBSTRING(@Query, @start, @len)), ',', '') +
        SUBSTRING(@Query, @start + @len + 1, LEN(@Query))

【问题讨论】:

    标签: sql sql-server database tsql sql-server-2012


    【解决方案1】:

    尝试以下方法:

    DECLARE @str nvarchar(max) = '0150566115,"HEALTH 401K","IC,ON","ICON HEALTH 401K",,,1,08/21/2014'
    SELECT
      SUBSTRING(@str, 1, CHARINDEX('"', @str, 1) - 1)
      + REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(@str, CHARINDEX('"', @str, 1), LEN(@str) - CHARINDEX('"', REVERSE(@str), 1) - CHARINDEX('"', @str, 1) + 2), ',', ' ' + CHAR(7) + ' '), CHAR(7) + ' ', ''), '" "', ','), '"', '')
      + REVERSE(SUBSTRING(REVERSE(@str), 1, CHARINDEX('"', REVERSE(@str), 1) - 1))
    
    
    --Explaination
    --Extracting the portion of the string before the first occurrence of '"'.
    DECLARE @part1 nvarchar(max) = SUBSTRING(@str, 1, CHARINDEX('"', @str, 1) - 1)
    SELECT
      @part1
    
    --String between first and last occurrence of '"' and removing unwanted characters.
    DECLARE @part2 nvarchar(max) = SUBSTRING(@str, CHARINDEX('"', @str, 1), LEN(@str) - CHARINDEX('"', REVERSE(@str), 1) - CHARINDEX('"', @str, 1) + 2)
    SET @part2 = REPLACE(REPLACE(REPLACE(REPLACE(@part2, ',', ' ' + CHAR(7) + ' '), CHAR(7) + ' ', ''), '" "', ','), '"', '')
    SELECT
      @part2
    
    --String after the last occurrence of '"'
    DECLARE @part3 nvarchar(max) = REVERSE(SUBSTRING(REVERSE(@str), 1, CHARINDEX('"', REVERSE(@str), 1) - 1))
    SELECT
      @part3
    
    --Concatenation
    SELECT
      @part1 + @part2 + @part3
    

    HTH!!!

    【讨论】:

      【解决方案2】:

      您的数据格式似乎是带分隔符的 CSV 格式。这是Excel经常使用的一种格式,可惜SQL Server似乎没有简单的读取方式。当我面对这样的文件时,我通常会这样做:

      • 将它们加载到 Excel 中
      • 制表符分隔的格式保存它们
      • 将它们导入 SQL Server

      幸运的是,当我不得不处理此类文件时,它们一直很小,适合 Excel。

      您似乎已经拥有数据库中的数据。经过一番研究,我偶然发现了this 对拆分函数的引用,该函数采用字符串分隔符和分隔符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2017-05-29
        • 2014-12-11
        • 1970-01-01
        • 2020-05-08
        • 1970-01-01
        相关资源
        最近更新 更多