파싱? ...컴마로 자르기 응용편...
SQL은 집합처럼 보이는 순차처리 어플일 뿐이다....집합 집합 집합 하고 2,3년차 꼬셔 사고를 말리지 말자..
아래는 재미있는 문자열 장난이다. 심심할때 한번 보길 바란다.
IF OBJECT_ID ('USP_SPLITSTRING') IS NULL
EXEC('CREATE PROC USP_SPLITSTRING AS SELECT 1 ')
GO
ALTER PROC USP_SPLITSTRING
(
@INPUTV VARCHAR(MAX) ='1,2,3,0,'
, @STRINGCNT INT = 4 -- 주던지 내부에서 LEN 해서 구하던지.......
)
AS
SET NOCOUNT ON
DECLARE @I1 VARCHAR (10), @I2 VARCHAR (10), @I3 VARCHAR (10), @I4 VARCHAR (10), @I5 VARCHAR (10)
,@I6 VARCHAR (10), @I7 VARCHAR (10), @I8 VARCHAR (10), @I9 VARCHAR (10), @I10 VARCHAR (10)
IF @STRINGCNT <= 10
BEGIN
SELECT
@I1 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I2 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I3 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I4 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I5 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I6 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I7 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I8 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I9 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I10 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
SELECT *
FROM (VALUES (@I1), (@I2), (@I3), (@I4), (@I5), (@I6), (@I7), (@I8), (@I9), (@I10)) V (INPUTV)
WHERE INPUTV <> ''
END ELSE BEGIN
PRINT 'WHILE 로 계속 돌거라....끝날때까지 '
END
GO
EXEC USP_SPLITSTRING '1,2,2,0,1,32,4,2,12222222,11,', 10 -- ROW 로 만드는데 약 수백 US 가 걸린다.
GO
EXEC USP_SPLITSTRING '1,2,2,0,1,32,4,2,12222222,11,32123,2,32,3,3,211123,', 16 -- 끝날때까지 돌거라~
GO
--1. 10개 파라메터로 호출
--2. 넘는것은 따로 호출
--3. 기타...등등