Remplacer la virgule entre guillemets avec espace

Salut, je table dans laquelle chaque ligne a des données comme:

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

Ce que je veux est de supprimer chaque virgule (,) qui est entre guillemets "". puis bave le rest de la string avec une virgule (,)

Je ne veux pas le faire en vérifiant chaque indicateur de paramètre de caractère pour le début et la fin des guillemets doubles.

Puis-je implémenter une sorte de regex?

Y a-t-il un moyen simple?

Ce que j'ai essayé jusqu'ici est juste de split la string sur la base de la virgule (,) Mais cela fonctionne pour un seul bloc de guillemets.

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

Essayez ce qui suit:

 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 ssortingng before the first occurrence of '"'. DECLARE @part1 nvarchar(max) = SUBSTRING(@str, 1, CHARINDEX('"', @str, 1) - 1) SELECT @part1 --Ssortingng 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 --Ssortingng 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 !!!

C'est trop long pour un commentaire.

Le format de vos données semble être un format CSV délimité. C'est un format fréquemment utilisé par Excel, et il est regrettable que SQL Server ne semble pas avoir un moyen simple de le lire. Quand je suis confronté à de tels files, je fais généralement ce qui suit:

  • Chargez-les dans Excel
  • Enregistrez-les dans un format délimité par des tabulations
  • Importez-les dans SQL Server

Heureusement, quand j'ai eu à traiter de tels files, ils ont été négligés et s'intègrent dans Excel.

Vous semblez avoir déjà datatables dans la database. Avec un peu de search, je suis tombé sur cette reference aux fonctions de séparation qui prennent un délimiteur de string ainsi qu'un séparateur.