Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 소수점 이하 자릿수가 2개를 초과하는 행 선택하기

MySQL에서 소수점 이하 자릿수가 2개를 초과하는 행 선택하기

소수점 이하 자릿수가 2개보다 많은 행을 조회하려면 MySQL의 SUBSTR() 함수를 INSTR(), LENGTH() 함수와 함께 활용하면 됩니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table selectRows2DecimalPlacesDemo
-> (
-> Amount varchar(100)
-> );
Query OK, 0 rows affected (0.73 sec)

다음은 INSERT 명령을 사용해 테이블에 레코드를 삽입하는 쿼리입니다.

mysql> insert into selectRows2DecimalPlacesDemo values('234.5678');
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectRows2DecimalPlacesDemo values('19.50');
Query OK, 1 row affected (0.19 sec)
mysql> insert into selectRows2DecimalPlacesDemo values('23.456');
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectRows2DecimalPlacesDemo values('12.123');
Query OK, 1 row affected (0.14 sec)

SELECT 문으로 테이블의 전체 레코드를 확인해 보겠습니다.

mysql> select * from selectRows2DecimalPlacesDemo;

실행 결과는 다음과 같습니다.

+----------+
| Amount |
+----------+
| 234.5678 |
| 19.50 |
| 23.456 |
| 12.123 |
+----------+
4 rows in set (0.00 sec)

소수점 이하 자릿수가 2개를 초과하는 행 조회 쿼리

아래 쿼리는 소수점 이하 자릿수가 2개보다 많은 행만 필터링하여 반환합니다.

mysql> select * from selectRows2DecimalPlacesDemo WHERE
LENGTH(SUBSTR(Amount,INSTR(Amount,"."))) > 3;

실행 결과는 다음과 같습니다.

+----------+
| Amount |
+----------+
| 234.5678 |
| 23.456 |
| 12.123 |
+----------+
3 rows in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.

  • INSTR(Amount, ".") — 값 안에서 마침표(.)의 위치를 찾습니다.
  • SUBSTR(Amount, INSTR(Amount, ".")) — 마침표 위치부터 문자열 끝까지 잘라냅니다. 예를 들어 '234.5678'은 '.5678'이 됩니다.
  • LENGTH(...) — 잘라낸 문자열의 길이를 계산합니다. 마침표 1개와 소수점 이하 자릿수를 합한 값이므로, 소수점 이하가 3자리 이상이면 길이가 4 이상, 즉 3보다 크게 됩니다.

결국 LENGTH(...) > 3 조건은 소수점 이하 자릿수가 3개 이상인 행만 걸러내는 역할을 합니다. 위 실행 결과에서 '19.50'처럼 소수점 이하가 2자리인 값은 제외된 것을 확인할 수 있습니다.