DB 프로시저 등에 파라메터를 여러개 전달해서
구분자로 분해해서 쿼리의 IN 문장에 쓰고 싶은 경우가 많은데..
정작 찾아보니... 없다!!
split 구현한것들은 내가 원하는 형태가 안 나오길래.. 직접 구현..
목표는 '5040:5050:5060:' --->'5040','5050','5060' 요 딴식이다!!
이하 mssql 스칼라 함수!!
(
P.S. 기껏 만들어 놨더니.. 생각대로 안됨... 내가 상상한 사용법으로 안됨..
https://stackoverflow.com/questions/2944511/sql-server-in-clause-with-a-declared-variable
위의 링크대로 해야 함..
)
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- -- =============================================
- -- Author:
- -- Create date: <2017-10-18>2017-10-18>
- -- Description: <특정구분자로 결합된 문자 집합을 IN에 사용할 수 있는 형식으로 변경 반환 '5040:5050:5060:' --->'5040','5050','5060' >
- -- 구분자 마지막까지 붙일것!!!
- -- SELECT dbo.UFN_CONVERT_PARAMS('5040:5050:5060:',':')
- -- =============================================
- ALTER FUNCTION dbo.UFN_CONVERT_PARAMS(
- @PARAMS VARCHAR(5000),
- @TOKKEN VARCHAR(10)
- )
- RETURNS VARCHAR(5000)
- AS
- BEGIN
- DECLARE @RTN VARCHAR(5000)
- DECLARE @TMP_CNT INT
- DECLARE @loop INT
- SET @TMP_CNT = LEN(@PARAMS)-LEN(REPLACE(@PARAMS,@TOKKEN,'')) -- 슬래시 갯수 추출
- SET @loop = 0
- DECLARE @SPLIT_SP VARCHAR(500) --분리한 값 저장
- DECLARE @SPLIT_REMAINS VARCHAR(500)
- DECLARE @SPLIT_TMP_CD VARCHAR(5)
- SET @SPLIT_SP = ''
- SET @SPLIT_TMP_CD = ''
- SET @SPLIT_REMAINS = @PARAMS
- WHILE(@loop < @TMP_CNT)
- BEGIN
- SET @SPLIT_TMP_CD = LEFT(@SPLIT_REMAINS,CHARINDEX(@TOKKEN,@SPLIT_REMAINS)-1)
- SET @SPLIT_SP = @SPLIT_SP + '''' + @SPLIT_TMP_CD + '''' + ','
- SET @SPLIT_REMAINS = REPLACE(@SPLIT_REMAINS,LEFT(@SPLIT_REMAINS,CHARINDEX(@TOKKEN,@SPLIT_REMAINS)),'')
- SET @loop = @loop + 1
- END
- RETURN LEFT(@SPLIT_SP, LEN(@SPLIT_SP) - CHARINDEX(',', reverse(@SPLIT_SP)))
- END
- GO