티스토리 뷰
/*
자동완성 기능을 위해서 구현한 함수라서 종성을 모두 초성으로 치환하였습니다.
예를 들어 사용자가 "깐"이라고 입력한 시점에서
"까나리"를 검색하게 될지 "깐돌이"를 검색하게 될지 모르기 때문에
자동완성으로 보여줄 대상의 data의 종성을 초성으로 변환하여 반환하도록 구현했습니다.
*/
--user function: decomposition Hangul syllalble by key stroke
ALTER FUNCTION [dbo].[uf_decom_syl_KS]( @chr NCHAR(1) )
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @cho INT; -- chosung
DECLARE @jung INT; -- jungsung
DECLARE @jungKS NVARCHAR(2); -- jungsung key stroke
DECLARE @jong INT; -- jongsung
DECLARE @jongKS NVARCHAR(2); -- jongsung key stroke
DECLARE @sylOffset INT; -- offset from '가'
DECLARE @Ret NVARCHAR(10);
IF ( UNICODE(@chr) BETWEEN 0xAC00 AND 0xD7A3 ) -- between '가' and '힣'
BEGIN
SET @sylOffset = UNICODE(@chr) - 0xAC00;
SET @cho = ( @sylOffset / (21*28) ) + 0x1100;
SET @jung = ( @sylOffset % (21*28) ) / 28 + 0x1161;
SET @jungKS = CASE @jung
WHEN 0x116A THEN NCHAR( 0x1169 ) + NCHAR( 0x1161 ) -- ㅘ
WHEN 0x116B THEN NCHAR( 0x1169 ) + NCHAR( 0x1162 ) -- ㅙ
WHEN 0x116C THEN NCHAR( 0x1169 ) + NCHAR( 0x1175 ) -- ㅚ
WHEN 0x116F THEN NCHAR( 0x116E ) + NCHAR( 0x1165 ) -- ㅝ
WHEN 0x1170 THEN NCHAR( 0x116E ) + NCHAR( 0x1166 ) -- ㅞ
WHEN 0x1171 THEN NCHAR( 0x116E ) + NCHAR( 0x1175 ) -- ㅟ
WHEN 0x1174 THEN NCHAR( 0x1173 ) + NCHAR( 0x1175 ) -- ㅢ
ELSE NCHAR( @jung )
END
SET @jong = ( @sylOffset % 28 ) + 0x11A7;
SET @jongKS = CASE @jong
WHEN 0x11A7 THEN ''
WHEN 0x11A8 THEN NCHAR( 0x1100 ) -- ㄱ
WHEN 0x11A9 THEN NCHAR( 0x1101 ) -- ㄲ
WHEN 0x11AA THEN NCHAR( 0x11A8 ) + NCHAR( 0x11BA ) -- ㄳ
WHEN 0x11AB THEN NCHAR( 0x1102 ) -- ㄴ
WHEN 0x11AC THEN NCHAR( 0x11AB ) + NCHAR( 0x11BD ) -- ㄵ
WHEN 0x11AD THEN NCHAR( 0x11AB ) + NCHAR( 0x11C2 ) -- ㄶ
WHEN 0x11AE THEN NCHAR( 0x1103 ) -- ㄷ
WHEN 0x11AF THEN NCHAR( 0x1105 ) -- ㄹ
WHEN 0x11B0 THEN NCHAR( 0x1105 ) + NCHAR( 0x1100 ) -- ㄺ
WHEN 0x11B1 THEN NCHAR( 0x1105 ) + NCHAR( 0x1106 ) -- ㄻ
WHEN 0x11B2 THEN NCHAR( 0x1105 ) + NCHAR( 0x1107 ) -- ㄼ
WHEN 0x11B3 THEN NCHAR( 0x1105 ) + NCHAR( 0x1109 ) -- ㄽ
WHEN 0x11B4 THEN NCHAR( 0x1105 ) + NCHAR( 0x1110 ) -- ㄾ
WHEN 0x11B5 THEN NCHAR( 0x1105 ) + NCHAR( 0x1111 ) -- ㄿ
WHEN 0x11B6 THEN NCHAR( 0x1105 ) + NCHAR( 0x1112 ) -- ㅀ
WHEN 0x11B7 THEN NCHAR( 0x1106 ) -- ㅁ
WHEN 0x11B8 THEN NCHAR( 0x1107 ) -- ㅂ
WHEN 0x11B9 THEN NCHAR( 0x1107 ) + NCHAR( 0x1109 ) -- ㅄ
WHEN 0x11BA THEN NCHAR( 0x1109 ) -- ㅅ
WHEN 0x11BB THEN NCHAR( 0x110A ) -- ㅆ
WHEN 0x11BC THEN NCHAR( 0x110B ) -- ㅇ
WHEN 0x11BD THEN NCHAR( 0x110C ) -- ㅈ
WHEN 0x11BE THEN NCHAR( 0x110E ) -- ㅊ
WHEN 0x11BF THEN NCHAR( 0x110F ) -- ㅋ
WHEN 0x11C0 THEN NCHAR( 0x1110 ) -- ㅌ
WHEN 0x11C1 THEN NCHAR( 0x1111 ) -- ㅍ
WHEN 0x11C2 THEN NCHAR( 0x1112 ) -- ㅎ
END
SET @Ret = NCHAR(@cho) + @jungKS + @jongKS;
END
ELSE
SET @Ret = @chr;
RETURN @Ret;
END
GO
--user function: decomposition string
CREATE FUNCTION dbo.uf_decom_str_KS( @str NVARCHAR(MAX) )
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @ii INT;
DECLARE @lenStr INT;
DECLARE @rtn NVARCHAR(MAX);
SET @ii = 1;
SET @lenStr = LEN( @str );
SET @rtn = '';
WHILE( @ii <= @lenStr )
BEGIN
SET @rtn = @rtn + dbo.uf_decom_syl_KS( SUBSTRING( @str, @ii, 1 ) );
SET @ii = @ii + 1;
END
RETURN @rtn;
END
GO
'program' 카테고리의 다른 글
mysql 파티션 테이블 (0) | 2017.03.15 |
---|---|
[MySQL] DB 데이터 크기, 여유공간 확인 (0) | 2017.02.22 |
자소단위 자동완성 기능 구현 (0) | 2017.02.09 |
Auto-Suggest Control(검색어 자동완성) (0) | 2017.02.09 |
[jQuery] plugin(제이쿼리 플러그인)으로 검색 자동완성(autocomplete) 구현하기 (0) | 2017.02.09 |