MySQL에서 저장된 이름 데이터처럼 대소문자가 뒤섞인 문자열을 정리해야 하는 경우가 자주 있습니다. 이럴 때 CONCAT, UCASE, LCASE, LEFT, SUBSTRING 함수를 조합하면 문자열 전체는 소문자로 변환하면서 첫 글자만 대문자로 유지할 수 있습니다.
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (1.32 sec)샘플 데이터 삽입하기
insert 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다. 의도적으로 대소문자가 섞인 값들을 넣어 보겠습니다.
mysql> insert into DemoTable values('JOhn');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('CHRIS');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('DAVID');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('RObert');
Query OK, 1 row affected (0.21 sec)select 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
출력 결과
+--------+ | Name | +--------+ | JOhn | | CHRIS | | DAVID | | RObert | +--------+ 4 rows in set (0.00 sec)
첫 글자만 대문자로 유지하며 나머지를 소문자로 변환하는 쿼리
핵심 쿼리는 다음과 같습니다. LEFT(Name, 1)로 첫 글자를 추출한 뒤 UCASE()로 대문자화하고, SUBSTRING(Name, 2)로 두 번째 글자부터 끝까지 잘라낸 후 LCASE()로 소문자화하여, 마지막에 CONCAT()으로 두 부분을 합칩니다.
mysql> update DemoTable -> set Name= CONCAT(UCASE(LEFT(Name, 1)), LCASE(SUBSTRING(Name, 2))); Query OK, 4 rows affected (0.30 sec) Rows matched: 4 Changed: 4 Warnings: 0
업데이트가 완료되었으니 테이블의 모든 레코드를 다시 한번 확인해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+--------+ | Name | +--------+ | John | | Chris | | David | | Robert | +--------+ 4 rows in set (0.00 sec)
위 출력 결과를 보면 'JOhn'은 'John'으로, 'CHRIS'는 'Chris'로, 'DAVID'는 'David'로, 'RObert'는 'Robert'로 변환된 것을 확인할 수 있습니다. 이처럼 간단한 함수 조합만으로도 대소문자 형식을 일관되게 정규화할 수 있으며, 사용자 이름이나 제품명 데이터를 정리할 때 매우 유용하게 활용됩니다.