用空格替换引号之间的逗号

时间:2014-09-06 12:06:37

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

嗨我表中的每一行都有如下数据:

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

我想要的是删除双引号“”之间的每个逗号(,)。然后使用逗号(,)

对字符串的其余部分进行slpit

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

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

有简单的方法吗?

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

    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))

2 个答案:

答案 0 :(得分:2)

尝试以下方法:

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 !!!

答案 1 :(得分:1)

评论太长了。

您的数据格式似乎是一种分隔的CSV格式。这是Excel经常使用的格式,不幸的是,SQL Server似乎没有一种简单的方法可以读取它。当我遇到这样的文件时,我通常会执行以下操作:

  • 将它们加载到Excel
  • 将它们保存为标签分隔格式
  • 将它们导入SQL Server

幸运的是,当我不得不处理这些文件时,它们一直处于较小的一面并适合Excel。

您似乎已经拥有数据库中的数据。通过一些研究,我偶然发现了this对分割函数的引用,这些函数带有字符串分隔符和分隔符。