금백조의 개발 블로그

[MSSQL]ISNUMERIC을 이용한 숫자, 문자 판단 및 주의사항 본문

Database/SQL Server(MSSQL)

[MSSQL]ISNUMERIC을 이용한 숫자, 문자 판단 및 주의사항

금백조 2021. 3. 14. 16:56
반응형

서론

 

현업에서 프로젝트 개발 중에 NVARCHAR 문자열 컬럼에 숫자가 들어올 경우 세 자리마다 콤마( , )를 표기해줘야 하는 요구사항이 있었습니다. 해당 문자열이 숫자인지, 문자인지를 판단하여 세 자리마다 콤마를 표기해줘야 했으므로 ISNUMERIC을 사용하여 해결했습니다. 이 과정 속에서 알게 된 ISNUMERIC을 이용한 숫자, 문자 판단과 주의사항을 예제를 통해 알아보겠습니다.

 


 

본론

 

[구문 형식]

 

ISNUMERIC([숫자, 문자를 판단할 컬럼])

 

[특징]

 

INPUT 컬럼이 문자일 경우 0, 숫자일 경우 1을 반환합니다.

 

[주의사항]

 

+,- 기호와 같은 숫자가 아닌 일부 문자 또는 달러($)와 같은 통화 기호도 1을 반환하기 때문에 주의가 필요합니다. 따라서 입력되는 문자열 데이터가 (+), (-) 기호나 ($) 달러와 같은 통화 기호가 들어올 경우 예외처리를 해주어야 합니다.

 

[CASE별 ISNUMERIC 반환 값 확인 예제]

 

--CASE별 ISNUMERIC 반환 확인 예제
SELECT ISNUMERIC(N'문자1') AS EXAMPLE_COLUMN1--문자열이므로 0반환
SELECT ISNUMERIC(N'123456789') AS EXAMPLE_COLUMN2--숫자이므로 1반환
SELECT ISNUMERIC(N'+123456789') AS EXAMPLE_COLUMN3--(+)기호 포함되는 숫자여도 1반환
SELECT ISNUMERIC(N'-123456789') AS EXAMPLE_COLUMN4--(-)기호 포함되는 숫자여도 1반환
SELECT ISNUMERIC(N'+') AS EXAMPLE_COLUMN5--(+)기호만으로도 1반환
SELECT ISNUMERIC(N'-') AS EXAMPLE_COLUMN6--(-)기호만으로도 1반환
SELECT ISNUMERIC(N'$') AS EXAMPLE_COLUMN7--통화 기호만으로도 1반환

 

 

[주의사항을 고려한 ISNUMERIC 활용 예제]

 

--ISNUMERIC 활용 예제
--(+), (-)기호, 통화 기호 자체만으로도 ISNUMERIC은 1을 반환하니 NOT IN으로 예외처리
--안할경우 기호를 NUMERIC으로 CONVERT 하므로 에러 발생 
--나머지는 ISNUMERIC으로 판단하여 숫자일경우 세자리 콤마 넣기 
SELECT CASE
         WHEN NVARCHAR_COLUMN NOT IN ( '+', '-', '$' )
              AND ISNUMERIC(NVARCHAR_COLUMN) = 1 
              THEN FORMAT(CONVERT(NUMERIC(18, 0), NVARCHAR_COLUMN), '##,##0')
         ELSE NVARCHAR_COLUMN
       END AS RESULT_COLUMN
FROM   (SELECT N'문자1' AS NVARCHAR_COLUMN--일반적인 문자
        UNION ALL
        SELECT N'+'--(+)기호 문자
        UNION ALL
        SELECT N'123456789'--숫자
        UNION ALL
        SELECT N'-123456789'--(-)기호를 포함한 숫자
        UNION ALL
        SELECT N'$'--통화 기호 문자
       )A 

 

 


 

결론

 

오늘은 평소에도 간간히 쓰던 ISNUMERIC에 대해 정리하는 시간을 가졌습니다. 정리한 내용으로 다른 프로젝트에도 필요시 활용해야겠습니다!

 

Reference

 

[ISNUMERIC(Transact-SQL)]

docs.microsoft.com/ko-kr/sql/t-sql/functions/isnumeric-transact-sql?view=sql-server-ver15

[MSSQL 숫자 3자리 콤마 넣기 또는 삭제하기]

ponyozzang.tistory.com/396

 

반응형