필요한 기능은 분할 기능입니다 (하단에 표시). 주어진 점에 조립 된 문자열을 원하는 경우
With SplitItems As
(
Select Position, Value
, Row_Number() Over (Order By Position) As ItemNum
From dbo.udf_Split(@TempCol, ',')
)
Select Value
From SplitItems
Where ItemNum <= @d
당신은 간단 할 것 :
With SplitItems As
(
Select Position, Value
, Row_Number() Over (Order By Position) As ItemNum
From dbo.udf_Split(@TempCol, ',')
)
Select ',' + Value
From SplitItems
Where ItemNum <= @d
Order By ItemNum
For Xml Path('')
분할 기능 :
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION [dbo].[udf_Split]
(
@DelimitedList nvarchar(max)
, @Delimiter nvarchar(2) = ','
)
RETURNS TABLE
AS
RETURN
(
With CorrectedList As
(
Select Case When Left(@DelimitedList, Len(@Delimiter)) <> @Delimiter Then @Delimiter Else '' End
+ @DelimitedList
+ Case When Right(@DelimitedList, Len(@Delimiter)) <> @Delimiter Then @Delimiter Else '' End
As List
, Len(@Delimiter) As DelimiterLen
)
, Numbers As
(
Select TOP(Coalesce(DataLength(@DelimitedList)/2,0)) Row_Number() Over (Order By c1.object_id) As Value
From sys.columns As c1
Cross Join sys.columns As c2
)
Select CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen As Position
, Substring (
CL.List
, CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen
, CharIndex(@Delimiter, CL.list, N.Value + 1)
- (CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen)
) As Value
From CorrectedList As CL
Cross Join Numbers As N
Where N.Value <= DataLength(CL.List)/2
And Substring(CL.List, N.Value, CL.DelimiterLen) = @Delimiter
)
'@ L'은 처음으로 '@ L'로 초기화되고 'L'은 무엇입니까? –
죄송합니다. @ L이 아니기 때문에 잘못 썼습니다. 연결하려고 시도했지만 성공하지 못했습니다. @L = ''와 같이 초기화됩니다. – cMinor
기본적으로 문자열'@TempCol = 'item1, item2, ...'에서 첫 번째'@d' 항목을 포함하는 부분 문자열을 추출하려고합니다. 그게 맞습니까? –