2014-09-06 78 views
2

您好我表中的每一行有數據,如:用空格替換引號之間的逗號

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

回答

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!

1

這是太長的評論。

數據的格式似乎是分隔的CSV格式。這是Excel經常使用的一種格式,不幸的是SQL Server似乎沒有簡單的方式來讀取它。當我遇到這樣的文件時,我通常會執行以下操作:

  • 它們加載到Excel
  • 它們保存在一個標籤分隔格式
  • 將其導入到SQL Server的

幸運的是,當我不得不處理這些文件,它們一直在小方並適合Excel。

您似乎已經擁有數據庫中的數據。通過一些研究,我偶然發現了帶有字符串分隔符和分隔符的分割函數的引用this