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

MySQL에서 값이 정수인지 확인하는 방법 (CAST 함수와 REGEXP 활용)

MySQL에서 주어진 값이 정수인지 확인하려면 CAST() 함수를 활용할 수 있습니다. 값을 UNSIGNED 타입으로 변환했을 때 값이 숫자가 아니면 0을 반환하고, 숫자라면 해당 숫자 값을 그대로 반환합니다. 이러한 특성을 이용해 값이 정수인지 여부를 판별할 수 있습니다.

사례 1 – 숫자가 섞인 문자열 검사

문자와 숫자가 혼합된 값을 CAST 함수로 변환해 보겠습니다.

mysql> select cast('John123456' AS UNSIGNED);

실행 결과는 다음과 같습니다. 값이 숫자가 아니므로 0이 반환되는 것을 확인할 수 있습니다.

+--------------------------------+
| cast('John123456' AS UNSIGNED) |
+--------------------------------+
|                              0 |
+--------------------------------+
1 row in set, 1 warning (0.00 sec)

사례 2 – 순수한 정수 값 검사

이번에는 정수로만 이루어진 값을 변환해 보겠습니다.

mysql> select cast('123456' AS UNSIGNED);

값이 숫자이므로 원래 값인 123456이 그대로 반환됩니다.

+----------------------------+
| cast('123456' AS UNSIGNED) |
+----------------------------+
|                     123456 |
+----------------------------+
1 row in set (0.00 sec)

이 논리는 실수(float) 값에도 동일하게 적용됩니다. 다음은 실수 값을 사용한 쿼리입니다.

mysql> SELECT CAST('78.90' AS UNSIGNED);

실행 결과는 다음과 같습니다. 소수점 이하는 잘리고 정수 부분만 반환됩니다.

+---------------------------+
| CAST('78.90' AS UNSIGNED) |
+---------------------------+
|                        78 |
+---------------------------+
1 row in set, 1 warning (0.00 sec)

정규식(REGEXP)을 활용한 대체 방법

CAST 함수 방식 외에도 REGEXP(정규 표현식) 연산자를 사용하면 어떤 값에 대해서도, 심지어 실수 값까지 모든 조건에서 정확하게 판별할 수 있습니다.

먼저 테스트용 테이블을 생성해 보겠습니다.

mysql> create table CheckingIntegerDemo
    -> (
    -> Value varchar(200)
    -> );
Query OK, 0 rows affected (0.88 sec)

테이블에 레코드를 삽입합니다.

mysql> insert into CheckingIntegerDemo values('John123456');
Query OK, 1 row affected (0.10 sec)

mysql> insert into CheckingIntegerDemo values('123456');
Query OK, 1 row affected (0.16 sec)

mysql> insert into CheckingIntegerDemo values('123.456');
Query OK, 1 row affected (0.16 sec)

저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from CheckingIntegerDemo;

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

+------------+
| Value      |
+------------+
| John123456 |
| 123456     |
| 123.456    |
+------------+
3 rows in set (0.00 sec)

위 결과에서 정수인 값은 123456 하나뿐이며, 나머지 두 개는 정수가 아닙니다.

값이 정수인지 확인하기 위한 기본 문법은 다음과 같습니다.

select yourColumnName from yourTableName where yourColumnName REGEXP '^-?[0-9]+$';

위 정규 표현식 '^-?[0-9]+$'는 선택적으로 음수 기호(-)를 허용하고, 그 뒤에 숫자(0~9)만 반복되는 문자열과 정확히 일치하는 행만 필터링합니다. 즉, 소수나 문자가 포함된 값은 제외되고 오직 정수 값만 출력됩니다.

mysql> select Value from CheckingIntegerDemo where Value REGEXP '^-?[0-9]+$';

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

+--------+
| Value  |
+--------+
| 123456 |
+--------+
1 row in set (0.00 sec)

정리

MySQL에서 값이 정수인지 확인하는 대표적인 방법은 두 가지입니다. 첫째, CAST(value AS UNSIGNED)를 사용해 변환 결과가 0인지 확인하는 방법이 있으며, 둘째, REGEXP '^-?[0-9]+$' 정규 표현식을 사용해 숫자로만 구성된 값만 정확히 걸러내는 방법이 있습니다. 특히 소수점이 있는 값까지 엄격하게 구분해야 한다면 정규식 방식이 더 안정적입니다.