반응형

Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색

함수를 만들어서 추출해보자. 

CREATE DEFINER=`gn`@`%` FUNCTION `fn_choSearch`(`str` varchar(20)) RETURNS varchar(20) CHARSET utf8 
 
BEGIN 
     declare returnStr varchar(100); 
     declare cnt int; 
     declare i int; 
     declare j int; 
     declare tmpStr varchar(10); 
 
     if str is null then 
         return ''; 
     end if; 
 
     set cnt = length(str)/3; 
     set i = 1; 
     set j = 1; 
 
     while i <=cnt DO 
           set tmpStr = substring(str,i,j); 
           set returnStr = concat(ifnull(returnStr,''), 
 
            case when tmpStr rlike '^(ㄱ|ㄲ)' OR ( tmpStr >= '가' AND tmpStr < '나' ) then 'ㄱ' 
                 when tmpStr rlike '^ㄴ' OR ( tmpStr >= '나' AND tmpStr < '다' ) then 'ㄴ' 
                 when tmpStr rlike '^(ㄷ|ㄸ)' OR ( tmpStr >= '다' AND tmpStr < '라' ) then 'ㄷ' 
                 when tmpStr rlike '^ㄹ' OR ( tmpStr >= '라' AND tmpStr < '마' ) then 'ㄹ' 
                 when tmpStr rlike '^ㅁ' OR ( tmpStr >= '마' AND tmpStr < '바' ) then 'ㅁ' 
                 when tmpStr rlike '^ㅂ' OR ( tmpStr >= '바' AND tmpStr < '사' ) then 'ㅂ' 
                 when tmpStr rlike '^(ㅅ|ㅆ)' OR ( tmpStr >= '사' AND tmpStr < '아' ) then 'ㅅ' 
                 when tmpStr rlike '^ㅇ' OR ( tmpStr >= '아' AND tmpStr < '자' ) then 'ㅇ' 
                 when tmpStr rlike '^(ㅈ|ㅉ)' OR ( tmpStr >= '자' AND tmpStr < '차' ) then 'ㅈ' 
                 when tmpStr rlike '^ㅊ' OR ( tmpStr >= '차' AND tmpStr < '카' ) then 'ㅊ' 
                 when tmpStr rlike '^ㅋ' OR ( tmpStr >= '카' AND tmpStr < '타' ) then 'ㅋ' 
                 when tmpStr rlike '^ㅌ' OR ( tmpStr >= '타' AND tmpStr < '파' ) then 'ㅌ' 
                 when tmpStr rlike '^ㅍ' OR ( tmpStr >= '파' AND tmpStr < '하' ) then 'ㅍ' 
            else 'ㅎ' end); 
           set i=i+1; 
     end while; 
  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; 
} 

 

 

쿼리에서 초성 추출하자.

WHERE 1=1 
<isEqual prepend='AND' property="choDiv" compareValue="N" > 
    S1.STOP_NAME LIKE concat('%',#keyword#,'%') OR S1.STOP_ID LIKE concat('%',#keyword#,'%') 
</isEqual> 
<isEqual prepend='AND' property="choDiv" compareValue="Y" > 
    fn_choSearch(S1.stop_name) LIKE concat('%',#keyword#,'%') OR S1.STOP_ID LIKE concat('%',#keyword#,'%') 
</isEqual> 

 

choDiv 값이 N 일 경우 일반검색
choDiv 값이 Y 일 경우 위의 oracle함수를 사용하여 초성검색


예를 들어
이렇게 구현을 하면 'ㄱㄴㄷ' 으로 검색을 하면
가나다
간난단
갇낟닫
...
등 초성이 ㄱ,ㄴ,ㄷ 인 데이터가 검색된다.

출처 : https://aljjabaegi.tistory.com/220

 

Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색

Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색 개발을 하다보면 자음으로만 검색할 수 있게 해달라는 요청이 들어오곤 한다. 그럴때마다 유용하게 사용하는 것이 아래의 함수이다. 그냥 복사 붙여넣고 실..

aljjabaegi.tistory.com

 

반응형
반응형

나는 1년 내내 좋아하는 일만 한다.
일터로 향하는 내 발걸음은 탭댄스를 추듯 가볍다.
나는 일터에 있을 때면 등을 기대고 누워 천장에 벽화를 그리고 있다고 생각한다.
일은 정말 재미있다.
돈을 더 번다고 내 삶의 질이 나아지지 않는다.
내 재산의 99%를 사회에 돌려주면 다른 사람들의 삶은 훨씬 나아진다.
- 워렌 버핏 

직업은 우리들 인생의 대부분을 차지합니다.
남들 보기에 좋은 일, 당장 유망한 직업이 아닌,
내가 평생 좋아하면서 즐겨서 할 수 있는 일을 찾는 것이 중요합니다.
자신이 가진 에너지를 쏟을 수 있는 일, 자신의 열정과 연결될 수 있는 곳에서
즐기면서 일할 때 누구나 위대함에 이를 수 있습니다.

반응형
반응형

희망이란 
본래 있다고도 할 수 없고 없다고도 할 수 없다. 
그것은 마치 땅 위의 길과 같은 것이다. 
본래 땅 위에는 길이 없었다. 
한 사람이 먼저 가고
걸어가는 사람이 많아지면 
그것이 곧 길이 되는 것이다.

- 루쉰의《고향》중에서 -


* 그렇습니다. 
희망은 처음부터 있었던 것이 아닙니다. 
아무것도 없는 곳에서도 생겨나는 것이 희망입니다. 
희망은 희망을 갖는 사람에게만 존재합니다. 
희망이 있다고 믿는 사람에게는 희망이 있고, 
희망 같은 것은 없다고 생각하는 사람에게는 
실제로도 희망은 없습니다. 

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

어떻게 진실이 그래!  (0) 2019.08.07
인생의 투자  (0) 2019.08.02
나무에게 배운다  (0) 2019.07.31
서른 살부터 마흔 살까지  (0) 2019.07.30
당신이 '예술작품'이다  (0) 2019.07.29

+ Recent posts