[MSSQL] 조건문에서 데이터가 숫자인지 확인 하는 방법 / IsNumeric
오늘 회사에서 데이터 처리를 위해 쿼리를 짜다가 어떤 컬럼이 숫자일 경우인지 판단해 조회해야 하는 상황이 발생해 비전공자로서 그 방법을 기록으로 남겨둡니다.
문제
먼저 언급한 것 처럼 제 상황은 이러 했습니다.
select
문을 이용해 데이터를 조회- 수많은 데이터 중 특정 컬럼이 숫자인 경우와 숫자가 아닌 경우에 따라 불러 올 값을 다르게 처리해야 함
일단 아래와 같이 쿼리를 간단하게 짜보았습니다만,
SELECT [컬럼1], [컬럼2], [컬럼3], ... , [컬럼N] FROM [TABLE]
WHERE [컬럼n의 값이 숫자가 아닌 경우]
UNION
SELECT [컬럼1], [컬럼2], [컬럼3], ... , [컬럼N] FROM [TABLE]
WHERE [컬럼n의 값이 숫자가 아닌 경우]
숫자인 경우와 숫자가 아닌 경우를 어떻게 구분할지 난감했습니다.
ISNUMERIC 함수
그런데 아주 간단하게 MS-SQL 내장 함수를 이용해 해결 할 수 있음을 알게 되었습니다. 그 함수는 바로 ISNUMERIC
. 함수명이 매우 직관적이죠?
해당 함수는 아래와 같은 몇 가지 특징이 있습니다.
ISNUMERIC([판단할 값])
형태로 사용- 인수가 숫자일 경우
1
을 반환 - 인수가 숫자가 아닐 경우
0
을 반환 - 자연수, 정수, 소수 뿐만 아니라
float
,real
형식의 근사치 역시 숫자로 판단 $10,000
과 같은 통화 기호가 있는 경우에도 숫자로 판단+
또는-
가 있는 숫자 뿐만 아니라+
또는-
기호만 있어도 숫자로 판단
다행히 저는 라이트 유저이기 때문에 크게 문제 될 내용은 없지만, 데이터를 다루시는 분들은 위 특징 중 몇 가지는 조심할 필요가 있어 보입니다.
해결
일단 ISNUMERIC
함수를 어떻게 사용하는지 알았으니, 실제로 아래와 같이 적용을 해보았습니다.
SELECT [컬럼1], [컬럼2], [컬럼3], ... , [컬럼N] FROM [TABLE]
WHERE ISNEMRIC([컬럼n]) = 0 -- 컬럼n의 값이 숫자가 아닌 경우
UNION
SELECT [컬럼1], [컬럼2], [컬럼3], ... , [컬럼N] FROM [TABLE]
WHERE ISNEMRIC([컬럼n]) = 1 -- 컬럼n의 값이 숫자인 경우
다행히도 제가 원하는 결과물이 잘 나와주었고, 생각보다 어렵지 않게 문제를 해결 할 수 있었습니다.
끝.
참고자료
- ISNUMERIC(Transact-SQL), MicroSoft Learn