반응형
개발을 하다보면 자음으로만 검색할 수 있게 해달라는 요청이 들어오곤 합니다.
그럴때마다 유용하게 사용하는 것이 아래의 함수입니다.
그냥 복사 붙여넣고 실행하면 함수가 생성됩니다.
Function 생성 쿼리
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; |
사용방법
var keyword = $("#keyword").val().toUpperCase(); var choKeyword = choHangul($("#keyword").val()); //초성검색 구분 if (keyword!="" && choKeyword==""){ choDiv = 'Y'; }else{ choDiv = 'N'; } |
/* 초성추출 */ 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; } |
sql 조건문에 활용하여 초성검색을 구현.
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> |
choDiv 값이 N 일 경우 일반검색
choDiv 값이 Y 일 경우 위의 oracle함수를 사용하여 초성검색
예를 들어
이렇게 구현을 하면 'ㄱㄴㄷ' 으로 검색을 하면
가나다
간난단
갇낟닫
...
등 초성이 ㄱ,ㄴ,ㄷ 인 데이터가 검색된다.
참조 : http://aljjabaegi.tistory.com/219
반응형
'직장생활 > DataBase' 카테고리의 다른 글
[Oracle] 테이블스페이스 관리 (0) | 2024.11.08 |
---|---|
Oracle 삭제된 테이블 복구 (91) | 2024.01.05 |
[Oracle] 오라클 SELECT 해서 INSERT 하는 방법 (여러개, 서브쿼리) (0) | 2023.05.16 |
[SQL] 테이블 스페이스 용량 늘리기 (0) | 2023.02.15 |
[ORACLE] 테이블 스페이스 용량 확인 쿼리 (0) | 2023.02.15 |
댓글