MySQL에서 INT 타입으로 선언된 열 값 안에 포함된 숫자 '0'의 개수를 세려면 LENGTH() 함수와 REPLACE() 함수를 함께 사용하면 됩니다. 이 글에서는 예제 테이블을 만들고, 단계별로 0의 개수를 구하는 방법을 살펴보겠습니다.
1. 테이블 생성하기
먼저 CREATE TABLE 문으로 예제 테이블을 생성합니다.
mysql> create table DemoTable
(
Value int
);
Query OK, 0 rows affected (1.22 sec)2. 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(10002000); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(00000); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(400560); Query OK, 1 row affected (0.19 sec)
참고로 INT 컬럼에는 앞의 0이 저장되지 않으므로, 00000은 실제로는 0으로 저장됩니다.
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------+ | Value | +----------+ | 10002000 | | 0 | | 400560 | +----------+ 3 rows in set (0.00 sec)
4. 0의 개수를 구하는 쿼리
다음은 각 값에 포함된 0의 개수를 구하는 쿼리입니다.
mysql> select (length(Value)-length(replace(Value,'0',''))) AS NumberOfZeros from DemoTable;
실행 결과는 다음과 같습니다.
+---------------+ | NumberOfZeros | +---------------+ | 6 | | 1 | | 3 | +---------------+ 3 rows in set (0.00 sec)
동작 원리
이 방법의 핵심은 REPLACE() 함수입니다. REPLACE(Value, '0', '')는 값에서 모든 '0'을 제거한 문자열을 반환합니다. 따라서 원래 값의 길이에서 0을 제거한 문자열의 길이를 빼면, 그 차이가 곧 제거된 '0'의 개수가 됩니다.
예를 들어 10002000은 총 8자리이며, 0을 모두 제거하면 '12'(2자리)가 남습니다. 따라서 8 - 2 = 6개의 0이 포함되어 있다는 것을 알 수 있습니다. 같은 방식으로 0은 1개, 400560은 3개의 0을 가지게 됩니다.