는이처럼 분할 기능을뿐만 아니라
같이 그것을 고려 할 수 있습니다
CREATE FUNCTION Split
(
@delimited nvarchar(max),
@delimiter nvarchar(100)
) RETURNS @t TABLE
(
id int identity(1,1),
val nvarchar(max)
)
AS
BEGIN
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'
insert into @t(val)
select
r.value('.','varchar(5)') as item
from @xml.nodes('//root/r') as records(r)
RETURN
END
GO
가 함께 JOIN
그들에게 간단한 작업을 할 것이다. 이처럼 :
SELECT
*
FROM
dbo.Split('1,5,6',',') AS a
JOIN dbo.Split('2,89,9',',') AS b
ON a.id=b.id
이의 상승은 성능이 재귀 분할 기능을 더 코멘트에서와 같이 어떤 ROW_NUMBER() OVER(ORDER BY SELECT 0)
편집
를 필요가 없다는 것입니다. 그래서 아마 이런 식으로 뭔가 :
CREATE FUNCTION dbo.Split (@s varchar(512),@sep char(1))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
GO
그리고 그 선택은 다음과 같이이다 : 아리온의 제안에
SELECT
*
FROM
dbo.Split('1,5,6',',') AS a
JOIN dbo.Split('2,89,9',',') AS b
ON a.pn=b.pn
네 말이 맞습니다. 그리고 그것은 모범 사례입니다.) 그러나 특정 "ORDER JOIN"이 있다고 생각했습니다 :-) –
예, SELECT 명령문이 원하는 순서로 탬퍼하는 비슷한 경우는 순서화 된 파생 테이블에서 선택하는 것입니다 : http://stackoverflow.com/ q/18961789/521799 –