Gaurav_Chaudhary Ответов: 1

Разделите строку с запятыми в SQL server с помощью []


select distinct val from dbo.Split('[Country],[Created By],[Date of Birth],[High School],[If Other, What Country?],[If Other- What Country?],[Middle Name],[Preferred First Name],[Sex]',',')

Это моя функция, которая разделяется запятой.
CREATE FUNCTION [dbo].[Split]    
(        
  @delimited nvarchar(max),        
  @delimiter nvarchar(100)        
) RETURNS @t TABLE        
(        
  val nvarchar(max)        
)        
AS        
BEGIN        
  declare @xml xml        
  set @xml = N'<root><r><![CDATA[' + replace(@delimited,@delimiter,']]></r><r><![CDATA[') + ']]></r></root>'        
        
  insert into @t(val)        
  select        
    r.value('.','varchar(max)') as item        
  from @xml.nodes('//root/r') as records(r)        
        
  RETURN        
END


Я хочу разделить строку вне [abc], [cde,cdf]
в abc и cde, cdf, но его разделение на

азбука,
cde и cdf

Что я уже пробовал:

Пожалуйста помочь.
Split a comma sperated string in Sql server with []

1 Ответов

Рейтинг:
9

CHill60

Разделить на ] вместо запятой замените [ и обработайте запятую в начале элемента, если он существует...

DECLARE @x nvarchar(max) = '[abc],[cde,cdf]'
;with q as
(
	select REPLACE(val, '[','') as val2
	from dbo.Split(@x, ']')
	where isnull(val,'') <> ''
)
select case when SUBSTRING(val2,1,1)=',' THEN SUBSTRING(val2, 2, LEN(val2))
		else val2 END
from q
Я использовал только CTE (или подзапрос), чтобы избежать нескольких вызовов функции split.


Maciej Los

5ед!