DataBase

[MySQL] snakecase to camelcase 변환 Function

nineDeveloper 2021. 10. 6.
728x90

Oracle 의 경우에는 INITCAP Function이 기본적으로 제공되어 아래와 같이 사용하면 Snakecase 문자열을 Camelcase 로 변환할 수 있다

Oracle INITCAP Function 사용예시

SELECT SUBSTR(REPLACE(INITCAP('1' || 'abc_ddd_hhh_ooo_ddd'), '_'), 2) CAMELCASE FROM DUAL;

결과:

abcDddHhhOooDdd

MySQL의 경우 해당 Function이 기본적으로 제공되지 않는 관계로 아래와 같이 직접 생성해서 사용해야된다

initcap Function 작성

DELIMITER $$

DROP FUNCTION IF EXISTS `schema`.`initcap`$$

CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8
READS SQL DATA
DETERMINISTIC
BEGIN
SET @str='';
SET @l_str='';
WHILE x REGEXP ' ' DO
SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str;
SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x;
SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str;
END WHILE;
RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2)))));
END$$

DELIMITER ;

snake_to_camel Function 작성

DELIMITER $$

DROP FUNCTION IF EXISTS `schema`.`snake_to_camel`$$

CREATE FUNCTION `snake_to_camel`(str varchar(255)) RETURNS varchar(255) CHARSET utf8
READS SQL DATA
DETERMINISTIC
BEGIN
RETURN substr(replace(initcap(concat('1',replace(str,'_',' '))),' ',''),2);
END$$

DELIMITER ;

사용

snake_to_camel Function 사용예시

select snake_to_camel('abc_ddd_hhh_ooo_ddd') camel;

결과:

abcDddHhhOooDdd

initcap Function 사용예시

select substr(replace(initcap(concat('1',replace('abc_ddd','_',' '))),' ',''),2) initcap;

결과:

abcDdd

Oracle INITCAP 참조: https://dorongdogfoot.tistory.com/88
MySQL initcap 참조: http://www.gurubee.net/article/84002
MySQL initcap 참조: https://stackoverflow.com/questions/12364086/how-can-i-achieve-initcap-functionality-in-mysql

728x90

댓글

💲 추천 글