다음은 Passing a varchar full of comma delimited values to a SQL Server IN function에서 이어집니다.SQL Server에서 따옴표 붙은 구분 기호가 포함 된 구분 된 텍스트 분할
나는 약간의 쉼표로 구분 된 텍스트를 분할 할하지만 임베디드 쉼표를 허용해야합니다 내가 기대하고있어 결과가
DECLARE @text NVARCHAR(1000) = 'abc,def,"ghi,jkl",mno';
을 : 여기
abc
def
ghi,jkl
mno
내가하는 데 사용하는 기능입니다 CSV 텍스트를 분할합니다.
성능이 문제가되는 경우가 여기에 제안을 사용하여 적용 할 수 있도록 루프를 사용
: https://stackoverflow.com/a/878964/482595
CREATE FUNCTION uf_Split
(
@Text NVARCHAR(MAX),
@Delimiter CHAR(1),
@Quote CHAR(1)
)
RETURNS @Result TABLE
(
[Index] INT NOT NULL IDENTITY(1, 1),
[Value] NVARCHAR(4000) NULL,
[CharPos] INT
)
AS
BEGIN
DECLARE @start BIGINT; SET @start = 1
DECLARE @end BIGINT; SET @end = 1
IF @Text is null
BEGIN
RETURN
END
WHILE 1=1
BEGIN
SET @end =
CASE
WHEN CHARINDEX(@Quote, @Text, @start) = @start THEN CHARINDEX(@Quote + @Delimiter, @Text, @start + 1)
ELSE CHARINDEX(@Delimiter, @Text, @start)
END
IF ISNULL(@end, 0) = 0
BEGIN
-- Delimiter could not be found in the remainder of the text:
INSERT @Result([Value], [CharPos]) VALUES(SUBSTRING(@Text, @start, DATALENGTH(@Text)), @start)
BREAK
END
ELSE IF (CHARINDEX(@Quote, @Text, @start) = @start) AND (CHARINDEX(@Quote + @Delimiter, @Text, @start + 1) = @end)
BEGIN
INSERT @Result([Value], [CharPos]) VALUES(SUBSTRING(@Text, @start + 1, @end - @start - 1), @start)
SET @start = @end + 2
END
ELSE
BEGIN
INSERT @Result([Value], [CharPos]) VALUES(SUBSTRING(@Text, @start, @end - @start), @start)
SET @start = @end + 1
END
END
RETURN
END
GO
대부분의 언어에서 그다지 중요하지 않은 제안입니다. 정규식을 사용하는 것은 매우 어렵습니다. 일반적으로 CSV 형식 분할을 처리하도록 특별히 설계된 코드/기능을 사용하는 것이 가장 좋습니다. 그것은 가능할 수 있습니다; 그러나 아마 재미 있지 않을 것입니다. –