당신은 다중 문 테이블 반환 함수와 함께이 작업을 수행 할 수 있습니다,하지만 난 정말 구문 분석이 유형의 훨씬 더 강력한 언어로 왼쪽라고 생각합니다. 이렇게하면 토큰 {up to 255 characters}
이 처리되고 SQL Server 버전에 따라 최대 약 8,000 자의 문자열이 입력됩니다. 더 필요하면 sys.all_columns
을 your own numbers table으로 대체하십시오.
DECLARE @x NVARCHAR(MAX);
SET @x = N'foo{bar} and think {splunge}';
SELECT Item FROM dbo.ParseTokens(@x, '{', '}') ORDER BY [Index];
결과 :
Item
-------
bar
splunge
독립 실행 형 문자열 - ... 내가 유효하지 않은 토큰 서열로부터 보호하기 위해 어떤 노력을하지 않았다
CREATE FUNCTION dbo.ParseTokens
(
@string NVARCHAR(MAX),
@token1 NVARCHAR(255),
@token2 NVARCHAR(255)
)
RETURNS @t TABLE([Index] INT IDENTITY(1,1), Item NVARCHAR(255))
AS
BEGIN
INSERT @t(Item)
SELECT SUBSTRING(x, 1, COALESCE(NULLIF(CHARINDEX(@token2, x)-1,-1),255))
FROM
(
SELECT Number, x = SUBSTRING(@string, Number,
CHARINDEX(@token1, @string + @token1, Number) - Number)
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY [object_id])
FROM sys.all_columns
) AS n(Number) WHERE Number <= CONVERT(INT, LEN(@string))
AND SUBSTRING(@token1 + @string, Number, LEN(@token1)) = @token1
) AS y
ORDER BY Number OPTION (MAXDOP 1);
DELETE @t WHERE [Index] = 1;
RETURN;
END
GO
샘플 사용을 참고
샘플 사용 현황 - 테이블 반대
DECLARE @x TABLE(ID INT IDENTITY(1,1), n NVARCHAR(MAX));
INSERT @x SELECT N'Here is a test sentence with a {Term1}. Sometime, a {Term2}
could be a word or phrase like {Phrase Term3}. {Term2} is repeated. Some Terms
could be a plural form of a another Term like {Term2}s. Here is a real
{Simple} Term.';
INSERT @x SELECT N'Hello {foo} there {bar} ...';
SELECT t.ID, p.Item
FROM @x AS t
CROSS APPLY dbo.ParseTokens(t.n, '{', '}') AS p;
결과 :
ID Item
---- ------------
1 Term1
1 Term2
1 Phrase Term3
1 Term2
1 Term2
1 Simple
2 foo
2 bar
은 왜 T-SQL에서이 작업을 수행해야합니까? C#이나 다른 어떤 것보다 더 좋은 것처럼 보입니다. –