많은 쿼리를 쉽게 처리를 할 수 있다.
예를 들어 웹사이트에서 회원가입을 할 때 "관심사항" 이라는 항목에
체크 박스가 있다고 가정하고 ...
이 체크 박스 항목은 이름이 전부 NAME="FAVI" 라고 하자
이런 항목이 10개가 있고 각각 VALUE는 1~10까지라고 가정한다.
이제 관심항목을 다음 페이지에서 체크를 할려고 하면
FAVI가 체크 되어 있는지 VALUE 값으로 체크 한다든지..
체크가 되어 있는 VALUE 값이 있을때 마다 DB에 업데이트를 한다든지
하는 로직을 간혹 볼수 있었다.
어차피 ASP 같은 언어에서 RESPONSE.WRITE REQUEST("FAVI") 를 출력하게 되면
1,3,4,5,8 이런식으로 컴마를 구분값으로 데이터를 출력하고 데이터베이스에도
이런 형식으로 입력이 된다.
이걸 한번에 보내고 한번에 처리해 보자.
우선 아래 함수를 만든다. (로직은 각자 분석)
/*
작성자 : 한영민
작성일 : 2004-03-16
설 명 : Split 함수 구현
*/
CREATE Function dbo.Split
(
@strdelimite NVarchar(4000)
)
Returns @tableVar Table
(cd int identity(0,1), descName varchar(100))
AS
Begin
Declare @StartPoint INT, @EndPoint INT
SET @StartPoint = 0
SET @EndPoint = 0
While(CHARINDEX(',',@strdelimite) > 0) Begin
SET @EndPoint = CHARINDEX(',',@strdelimite)
--이 부분에서 테이블 변수에 Insert
Insert @tableVar(descName) Values( RTrim(LTrim(Substring(@strdelimite, @StartPoint, @EndPoint))) )
SET @StartPoint = @EndPoint + 1
SET @strdelimite = Substring(@strdelimite, @StartPoint, Len(@strdelimite))
SET @StartPoint = 0
End
IF Len(@strdelimite) > 0 Begin
Insert @tableVar(descName) Values (RTrim(LTrim(@strdelimite)))
End
Return
End
GO
GO
--- 이제 사용법이다 ---
Select descName from dbo.Split('1,3,4,5,6,7')
--- 결과 ---
descName
-----------------
1
3
4
5
6
7
이런 형태로 테이블 형식의 출력이 이루어진다.
로직을 유심히 본 사람들은 알겠지만. cd 라는 항목도 만들어 지는데
이는 하나 하나 짜를때 마다 그 고유 키 값을 지정해 둔 것이다.
(구분자는 컴마로 고정하였음)
Select cd,descName from dbo.Split('1,3,4,5,6,7')
라고 출력하게 되면 각 항목의 키 값인 부분도 출력이 된다.
이를 이용하면 게시물의 순서 변경이나 폼 항목에서 listbox (멀티셀렉트), checkbox 등
다양한 컨트롤을 쉽게 다룰수 있다.
사용처를 잘 모르겠다라면 아마 sql query 용법을 잘 모르는 분이거나 머리가 안 좋은 ..(농담)
insert ... select 를 할수도 있고
update join을 할 수도 있다.
나머지는 여러분게 맡긴다.
관련 항목------
ORACLE (SPLIT) 버젼
링 크
http://mcpicdtl.blogspot.com/2008/03/oracle-split-by-vins.html