주어진 값이 문자열인지 확인하기 위해 우리는 cast() 함수를 사용합니다. 값이 숫자가 아니면 0을 반환하고, 그렇지 않으면 숫자 값을 반환합니다. 이런 식으로 값이 정수인지 아닌지 확인할 수 있습니다.
사례 1 - 정수가 포함된 문자열 확인
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);
다음은 출력입니다. 값이 숫자임을 나타내므로 값 자체가 반환됩니다.
+----------------------------+ | cast('123456' AS UNSIGNED) | +----------------------------+ | 123456 | +----------------------------+ 1 row in set (0.00 sec)
이 논리는 float에서도 잘 작동합니다.
다음은 float 값을 사용하는 쿼리입니다.
mysql> SELECT CAST('78.90' AS UNSIGNED);
다음은 출력입니다.
+---------------------------+ | CAST('78.90' AS UNSIGNED) | +---------------------------+ | 78 | +---------------------------+ 1 row in set, 1 warning (0.00 sec)
일반 연산자를 사용한 대체 논리
부동 소수점을 포함한 모든 값에 대한 모든 조건에서 작동합니다.
새 테이블을 만들어 보겠습니다.
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]+$';
정규 표현식을 사용한 쿼리입니다. 정수 값만 출력합니다.
mysql> select Value from CheckingIntegerDemo where Value REGEXP '^-?[0-9]+$';
다음은 출력입니다.
+--------+ | Value | +--------+ | 123456 | +--------+ 1 row in set (0.00 sec)