한글에서 자음만 추출하는 MySQL 함수를 생성한다. 5.1.41 버전과 5.5.20 버전의 오래된 서버에서도 정상적으로 생성 되었다.
특수문자, 숫자, 공백 등의 문자는 조작하지 않는다.
- LINK
- [PHP] 초성/자음 추출 함수
위 링크는 동일 기능의 PHP 함수이다.
DELIMITER $$
USE `databasename`$$
DROP FUNCTION IF EXISTS `chosung`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `chosung`(STR VARCHAR(255)) RETURNS VARCHAR(255) CHARSET utf8
BEGIN
DECLARE I INT;
DECLARE J INT;
DECLARE TMPSTR VARCHAR(255);
DECLARE COL1 VARCHAR(2);
SET I = CHAR_LENGTH(STR);
SET J = 1;
SET TMPSTR = '';
WHILE J <=I DO
SET COL1 = SUBSTRING(STR, J, 1);
SET TMPSTR = CONCAT(TMPSTR,(
CASE WHEN COL1 < 'ㄱ' THEN COL1
WHEN ASCII('ㄱ') <= ASCII(COL1) AND ASCII(COL1)<= ASCII('ㅎ') THEN COL1
WHEN COL1 < '까' THEN 'ㄱ'
WHEN COL1 < '나' THEN 'ㄲ'
WHEN COL1 < '다' THEN 'ㄴ'
WHEN COL1 < '따' THEN 'ㄷ'
WHEN COL1 < '라' THEN 'ㄸ'
WHEN COL1 < '마' THEN 'ㄹ'
WHEN COL1 < '바' THEN 'ㅁ'
WHEN COL1 < '빠' THEN 'ㅂ'
WHEN COL1 < '사' THEN 'ㅃ'
WHEN COL1 < '싸' THEN 'ㅅ'
WHEN COL1 < '아' THEN 'ㅆ'
WHEN COL1 < '자' THEN 'ㅇ'
WHEN COL1 < '짜' THEN 'ㅈ'
WHEN COL1 < '차' THEN 'ㅉ'
WHEN COL1 < '카' THEN 'ㅊ'
WHEN COL1 < '타' THEN 'ㅋ'
WHEN COL1 < '파' THEN 'ㅌ'
WHEN COL1 < '하' THEN 'ㅍ'
WHEN COL1 <= '힣' THEN 'ㅎ'
ELSE COL1
END
));
SET J = J + 1 ;
END WHILE;
RETURN TMPSTR;
END$$
DELIMITER ;
함수 생성 시도 시 아래 오류 메시지가 발생할 수 있다.
Error Message
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
사용자 함수 생성에 관련한 서버 설정 때문인데, 아래 쿼리로 해결 가능하다.
SET GLOBAL log_bin_trust_function_creators = 1;
함수를 생성하고 테스트를 해 보자.
SELECT chosung('ㅇㅅㅅ ㅈㄱ'), chosung('이순신 장군')
결과는 둘 다 ㅇㅅㅅ ㅈㄱ 이다.
추가로 LIKE 에서 사용하려면, LIKE CONCAT('%', chosung('이순신 장군'), '%') 이렇게 CONCAT()을 활용한다.
참고문헌 및 관련링크.
'코딩 > SQL_Query' 카테고리의 다른 글
MySQL - SELECT 결과로 UPDATE, JOIN 하여 UPDATE (0) | 2023.02.16 |
---|---|
MySQL, PHP 주기별 (주간 / 일간 / 월간) 합계, 매출 데이터 구하기 (0) | 2023.01.25 |
mysql - 여러 행(row)의 데이터를 한 줄로 출력 (0) | 2022.09.28 |
[MySQL] 있으면 UPDATE 없으면 INSERT - ON DUPLICATE KEY UPDATE (0) | 2015.04.20 |
[MySQL] UPDATE 쿼리 WHERE 절 서브쿼리 문제 (0) | 2015.01.22 |