INITCAP() 함수란?
MySQL의 INITCAP() 함수는 문자열에서 각 단어의 첫 글자를 대문자로, 나머지 글자는 모두 소문자로 변환하여 표시합니다.
그렇다면 이와 반대되는 기능, 즉 각 단어의 첫 글자만 소문자로, 나머지 글자는 모두 대문자로 변환하려면 어떻게 해야 할까요? 안타깝게도 MySQL에는 이러한 기능이 내장되어 있지 않기 때문에, 사용자 정의 함수(Stored Function)를 직접 작성해야 합니다.
사용자 정의 함수 만들기
아래는 각 단어의 첫 글자만 소문자로 바꾸고 나머지는 모두 대문자로 변환하는 함수입니다.
mysql> delimiter //
mysql> create function convertFirstLetterToLowerAndRemainingToCapital(value varchar(250))
returns varchar(250)
deterministic
begin
declare valueLength int;
declare l int;
set valueLength = char_length(value);
set value = upper(value);
set l = 0;
while (l < valueLength ) do
if (mid(value,l ,1) = ' ' or l = 0) then
if (l < valueLength ) then
set value= concat(
left(value,l),
lower(mid(value,l+ 1,1)),
right(value,valueLength - l - 1)
);
end if;
end if;
set l = l + 1;
end while;
return value;
end;
//
Query OK, 0 rows affected (0.17 sec)
mysql> delimiter ;
함수의 동작 원리
이 함수는 다음과 같은 순서로 동작합니다.
- char_length()로 입력받은 문자열의 전체 길이를 구합니다.
- upper()를 이용해 문자열 전체를 먼저 대문자로 변환합니다.
- 반복문(while)을 돌면서 공백 위치 또는 문자열의 시작 지점(l = 0)을 찾아, 해당 위치의 한 글자만 lower()로 소문자화합니다.
- 변환이 완료된 문자열을 반환(return)합니다.
함수 호출하기
SELECT 문을 사용하면 생성한 함수를 간단히 호출할 수 있습니다.
mysql> select convertFirstLetterToLowerAndRemainingToCapital('Introduction To MySQL');실행 결과는 다음과 같습니다.
+-------------------------------------------------------------------------+
| convertFirstLetterToLowerAndRemainingToCapital('Introduction To MySQL') |
+-------------------------------------------------------------------------+
| iNTRODUCTION tO mYSQL |
+-------------------------------------------------------------------------+
1 row in set, 2 warnings (0.04 sec)
출력 결과를 보면 각 단어의 첫 글자('I', 'T', 'M')만 소문자로 변환되고, 나머지 글자는 모두 대문자로 유지된 것을 확인할 수 있습니다. 이처럼 사용자 정의 함수를 활용하면 MySQL에서 제공하지 않는 다양한 문자열 변환 기능도 손쉽게 구현할 수 있습니다.