[MSSQL] 숫자인지 확인 방법 (ISNUMERIC 함수)

SQL Server에서 문자열이 숫자 형식인지 체크하기 위해서는 ISNUMERIC 함수를 사용한다. 숫자인 경우 '1'을 반환하고 숫자가 아닌 경우 '0'을 반환한다. ISNUMERIC 함수는 조건절에서 ISNUMERIC(칼럼) = 1로 사용하면 된다. 수치 값에서 사용하는 특수 문자는 숫자로 인식하므로 아래를 예제를 참고하면 된다.

 

MSSQL ISNUMERIC 함수 사용법

목차
  1. 숫자인지 체크 방법
  2. 양수, 음수 및 통화 기호가 있을 경우
  3. 소수점과 천 단위 구분자가 있을 경우
  4. ISNUMERIC 함수 활용
  5. 문자열을 숫자로 변환 시 TRY 함수 사용

 

숫자인지 체크 방법

SELECT ISNUMERIC('1234')
     , ISNUMERIC('a123')
     , ISNUMERIC('abcd')

 

 

ISNUMERIC 함수는 문자열이 숫자인 경우 '1'을 반환하고 숫자가 아니면 '0'을 반환한다.

 

문자열에 숫자 이외의 문자가 있을 경우  숫자가 아니므로 '0'을 반환한다. 그러나 수치 값에서 사용하는 특수 문자는 예외의 케이스가 있으므로 아래를 참고하면 된다.

 

양수, 음수 및 통화 기호가 있을 경우

SELECT ISNUMERIC('+1234')
     , ISNUMERIC('-1234')
     , ISNUMERIC('$1234')
     , ISNUMERIC('\1234')

 

 

양수, 음수 기호 및 통화 기호가 문자열의 앞에 존재할 경우 숫자로 인식한다.

해당 기호가 문자열의 중간이나 뒤에 있으면 숫자로 인식하지 않는다.

 

소수점과 천 단위 구분자가 있을 경우

SELECT ISNUMERIC('.1234')
     , ISNUMERIC('12.34')
     , ISNUMERIC('1234.')
     , ISNUMERIC(',1234')
     , ISNUMERIC('12,34')
     , ISNUMERIC('1234,')

 

 

소수점과 천 단위 구분자는 문자열의 어느 위치에 있어도 숫자로 인식한다.

 

ISNUMERIC 함수 활용

WITH temp AS (
    SELECT '1234' AS num UNION ALL
    SELECT 'a123' AS num UNION ALL
    SELECT 'abcd' AS num
)

SELECT num
     , CASE WHEN ISNUMERIC(num) = 1 THEN CAST(num AS int) END AS [isnum]
  FROM temp

 

 

CASE 표현식의 조건절에서 숫자인지 판단할 때 사용할 수 있다.

 

WITH temp AS (
    SELECT '1234' AS num UNION ALL
    SELECT 'a123' AS num UNION ALL
    SELECT 'abcd' AS num
)

SELECT num
     , CAST(num AS int) AS [isnum]
  FROM temp
 WHERE ISNUMERIC(num) = 1

 

 

WHERE 절에서 숫자인 경우만 조회하도록 조건을 부여할 수 있다.

 

문자열을 숫자로 변환 시 TRY 함수 사용

 

CAST 및 CONVERT 함수로 문자열을 숫자로 변환할 때 수치 값이 아닐 경우 오류가 발생한다. 이럴 때는 위의 예제처럼 CASE 표현식과 ISNUMERIC 함수를 사용하여 예외처리를 할 수 있지만, SQL Server 2012부터 TRY 함수가 추가되었기 때문에 수치 값이 아니라도 오류가 발생하지 않도록 변환이 가능하다.

 

SELECT TRY_CAST('1234' AS int)
     , TRY_CAST('a123' AS int)
     , TRY_CONVERT(int, '1234')
     , TRY_CONVERT(int, 'a123')

 

 

TRY 함수를 사용하면 형식이 일치할 경우 형 변환이 되고, 부적합할 경우 NULL을 반환한다.

 

 

댓글

Designed by JB FACTORY