[MSSQL] 조건문에서 데이터가 숫자인지 확인 하는 방법 / IsNumeric

folder 프로그래밍 calendar_month web_traffic 3

오늘 회사에서 데이터 처리를 위해 쿼리를 짜다가 어떤 컬럼이 숫자일 경우인지 판단해 조회해야 하는 상황이 발생해 비전공자로서 그 방법을 기록으로 남겨둡니다.

문제

먼저 언급한 것 처럼 제 상황은 이러 했습니다.

  1. select 문을 이용해 데이터를 조회
  2. 수많은 데이터 중 특정 컬럼이 숫자인 경우와 숫자가 아닌 경우에 따라 불러 올 값을 다르게 처리해야 함

일단 아래와 같이 쿼리를 간단하게 짜보았습니다만,

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의 값이 숫자인 경우

다행히도 제가 원하는 결과물이 잘 나와주었고, 생각보다 어렵지 않게 문제를 해결 할 수 있었습니다.

끝.

참고자료

댓글 남기기