MySQL에서는 LENGTH() 함수와 REPLACE() 함수를 조합하면 한 행(레코드) 안에 특정 기호가 몇 번 등장하는지 쉽게 계산할 수 있습니다. 핵심 원리는 간단합니다. 전체 문자열의 길이에서 해당 기호를 제거한 문자열의 길이를 빼면, 그 차이가 곧 기호의 개수가 됩니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
Value varchar(200)
);
Query OK, 0 rows affected (0.54 sec)2. 데이터 삽입하기
INSERT 명령을 사용해 테이블에 샘플 데이터를 입력합니다.
mysql> insert into DemoTable values('?1234?6789?5656?324?');
Query OK, 1 row affected (0.17 sec)3. 저장된 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------------------+ | Value | +----------------------+ | ?1234?6789?5656?324? | +----------------------+ 1 row in set (0.00 sec)
4. 특정 기호 개수 세기
이제 물음표('?') 기호가 몇 개 들어 있는지 계산하는 쿼리입니다.
mysql> SELECT LENGTH(Value) - LENGTH(REPLACE(Value,'?','')) from DemoTable;
실행 결과는 다음과 같습니다.
+-----------------------------------------------+ | LENGTH(Value) - LENGTH(REPLACE(Value,'?','')) | +-----------------------------------------------+ | 5 | +-----------------------------------------------+ 1 row in set (0.03 sec)
동작 원리 설명
이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.
1단계: REPLACE(Value, '?', '')는 문자열에서 모든 '?' 기호를 빈 문자열로 치환하여 제거합니다.
2단계: LENGTH(Value)는 원본 문자열의 길이를 구하고, LENGTH(REPLACE(...))는 기호가 제거된 문자열의 길이를 구합니다.
3단계: 두 길이의 차이를 계산하면 제거된 기호의 개수, 즉 원본 문자열에 포함된 '?'의 개수가 됩니다.
예제 문자열 '?1234?6789?5656?324?'의 경우 전체 길이는 20자이고, '?'를 모두 제거하면 15자가 되므로 차이인 5가 반환됩니다. 실제로 문자열을 살펴보면 '?'가 정확히 5번 등장하는 것을 확인할 수 있습니다.
참고 사항
한글처럼 멀티바이트 문자가 포함된 데이터의 경우 CHAR_LENGTH()와 REPLACE()를 함께 사용하는 것이 더 정확할 수 있습니다. 또한 이 방법은 '?'뿐만 아니라 쉼표(','), 하이픈('-') 등 어떤 문자든 동일한 방식으로 개수를 세는 데 활용할 수 있습니다.