반응형
Oracle 오라클 자음 초성 추출 함수, 자음으로 검색, 초성 검색
개발을 하다보면 자음으로만 검색할 수 있게 해달라는 요청이 들어오곤 한다.
그럴때마다 유용하게 사용하는 것이 아래의 함수이다.
그냥 복사 붙여넣고 실행하면 함수가 생성된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
create or replace function fn_choSearch( str in varchar2) return varchar2
is
returnStr varchar2(100);
cnt number := 0;
tmpStr varchar2(10);
begin
if str is null then
return '';
end if;
cnt := length(str);
for i in 1 .. cnt
loop
tmpStr := substr(str,i,1);
returnStr := returnStr ||
case when tmpStr < 'ㄱ' then substr(tmpStr, 1, 1)
when ascii('ㄱ') <= ascii(tmpStr) and ascii(tmpStr) <= ascii('ㅎ') then chr(ascii(tmpStr))
when tmpStr < '나' then 'ㄱ'
when tmpStr < '다' then 'ㄴ'
when tmpStr < '라' then 'ㄷ'
when tmpStr < '마' then 'ㄹ'
when tmpStr < '바' then 'ㅁ'
when tmpStr < '사' then 'ㅂ'
when tmpStr < '아' then 'ㅅ'
when tmpStr < '자' then 'ㅇ'
when tmpStr < '차' then 'ㅈ'
when tmpStr < '카' then 'ㅊ'
when tmpStr < '타' then 'ㅋ'
when tmpStr < '파' then 'ㅌ'
when tmpStr < '하' then 'ㅍ'
else 'ㅎ'
end;
end loop;
return returnStr;
end; |
|
사용방법은 아래와 같다.
필자의 경우 웹페이지의 검색단에서 초성인지 아닌지 아래와 같이 구분을 하여
1
2
3
4
5
6
7
8
9 |
var keyword = $("#keyword").val().toUpperCase();
var choKeyword = choHangul($("#keyword").val());
//초성검색 구분
if (keyword!="" && choKeyword==""){
choDiv = 'Y';
}else{
choDiv = 'N';
} |
cs |
1
2
3
4
5
6
7
8
9
10
11
12 |
/* 초성추출 */
function choHangul(str) {
cho = ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"];
result = "";
for(i=0;i<str.length;i++) {
code = str.charCodeAt(i)-44032;
if(code>-1 && code<11172){
result += cho[Math.floor(code/588)];
}
return result;
} |
cs |
sql 조건문에 활용하여 초성검색을 구현하였다.
1
2
3
4
5
6
7
8 |
WHERE 1=1
<isEqual prepend='AND' property="choDiv" compareValue="N" >
S1.STOP_NAME LIKE '%'||#keyword#||'%' OR S1.STOP_ID LIKE '%'||#keyword#||'%'
</isEqual>
<isEqual prepend='AND' property="choDiv" compareValue="Y" >
fn_choSearch(S1.stop_name) LIKE '%'||#keyword#||'%' OR S1.STOP_ID LIKE '%'||#keyword#||'%'
</isEqual> |
cs |
choDiv 값이 N 일 경우 일반검색
choDiv 값이 Y 일 경우 위의 oracle함수를 사용하여 초성검색
예를 들어
이렇게 구현을 하면 'ㄱㄴㄷ' 으로 검색을 하면
가나다
간난단
갇낟닫
...
등 초성이 ㄱ,ㄴ,ㄷ 인 데이터가 검색된다.
Link : Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색
반응형
'Database > SQL' 카테고리의 다른 글
MariaDB 마리아디비 다운로드 설치 및 이클립스 프로젝트 연동 (0) | 2016.04.19 |
---|---|
Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색 (4) | 2016.04.18 |
오라클 부분 조회, 페이징 처리, ROW_NUMBER(), ROWNUM, 원하는 행 조회 (0) | 2016.01.14 |
Oracle 오라클 KEEP()함수 사용법 그룹함수로 조회한 행 중에 다른 컬럼 가져오는 방법 (0) | 2015.12.22 |
오라클 Oracle 가장큰값, 두번째 큰값, 가장작은값, 두번째로 작은값 구하기 GREATEST, LEAST (0) | 2015.11.25 |
댓글