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자리 콤마 넣기 또는 삭제하기]
반응형