int을(를) 데이터 형식 numeric(으)로 변환 오류 해결
문제 원인
MS-SQL 서버에서 데이터 형변환 시 나타는 문제를 가지고 설명드리겠습니다.
에러 메시지 그대로 int 형식을 numeric 형태로 변환하는 중에 형식이 맞이 않아서 발생하는 문제입니다.
먼저 데이터 형식에 대하 이해가 먼저 필요합니다.
가장 많이 사용하는 정확한 수치형에는
구분 | 범위 | 바이트 | |
bigint | –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | -2^63에서 2^63-1 | 8바이트 |
int | –2,147,483,648 ~ 2,147,483,647 | -2^31 ~ 2^31-1 | 4바이트 |
smallint | –32,768 ~ 32,767 | -2^15 ~ 2^15-1 | 2바이트 |
tinyint | 0 ~ 255 | 2^0-1 ~ 2^8-1 | 1바이트 |
decimal numeric |
1 ~ 9 | 5바이트 | |
10 ~ 19 | 9바이트 | ||
20 ~ 28 | 13바이트 | ||
29 ~ 38 | 17바이트 |
bigint, int, smallint, tinyint 는 형식을 선택만 해주면 되는데,
decimal, numeric 형태는 전체 자릿수 및 소수 자릿수를 입력해야 합니다.
아래 그림을 보시면 이해가 쉬우실 것 같습니다.
- decimal(10, 5)
- 숫자 10은 소수점을 포함한 전체 자릿수입니다.
- 숫자 5는 소수점 자릿수를 나타냅니다.
- 즉, 12345.67890 처럼 표현하기 위함이죠
- 전체 자릿수는 10자리인데 소수점을 5자리로 설정하겠다는 의미입니다.
- 123456790.12345 => X
- numeric(18,2)
- 숫자 18은 소숫점을 포함함 전체 자릿수입니다.
- 숫자 0은 소수점 자릿수를 나타냅니다.
- 즉, 123456789012345678.01
그럼, 아까 오류로 넘어가 보면 어떻게 해결해야 될지 방법을 아실 수 있습니다.
int, bigint 등 정수형 자료를 decimal, numeric 형태로 형변환 시 가장 많이 발생합니다.
특히, 다른 테이블과의 조인 시, 통계용 쿼리 작성 시 데이터 형식이 맞지 않을 경우 발생합니다.
해결방안
아래 표를 참고로 설명드려보겠습니다. Int 수량의 최댓값은 688200 이라고 가정합니다.
Int 수량 => Decimal 수량처럼 변경하려면 어떻게 쿼리 작성해야 할까요?
MS-SQL 형 변환 쿼리는 Convert와 Cast 두 개가 있는데 저는 Convert를 이용하겠습니다.
SELECT Convert(decimal(11, 5), [Int 수량]) as [Decimal 수량] FROM [테이블명] ==> O
SELECT Convert(decimal(10, 5), [Int 수량]) as [Decimal 수량] FROM [테이블명] ==> X
두 번째 구문은 Int 수량의 최댓값은 688200 으로 글자 자릿수는 6자리입니다.
우리가 만들려는 소수점 자릿수는 5자리라서 6 + 5 = 11 로 decimal(11, 5) 로 해야 오류 없이 변환이 됩니다.
다만, 위 예제의 경우는 최댓값이 688200 이지만 입력된 자료값이 다 다르기 때문에 경우에 맞게 하시면 됩니다.
참고로 int 형의 경우 –2,147,483,648 ~ 2,147,483,647 값을 가지니 10 + 원하는 소수점 자리수로 처리하면 되겠네요.
즉, 소숫점 자릿수를 3자리로 할 경우 decimal(13, 3) 처럼 하면 됩니다.
decimal, numeric 에 대한 자세한 내용은 아래 링크를 걸어 드렸습니다.
개발자의 경우 프로그램 코딩만 하지 않습니다.
DataBase 관련한 사항 중 데이터 형태, 범위, 저장 바이트 정도는 기억하고 있으면
많은 도움이 됩니다.
'컴퓨터 활용 팁 > DataBase' 카테고리의 다른 글
MS-SQL 난수(랜덤) 함수 rand 제대로 알고 쓰자 (0) | 2023.09.13 |
---|---|
MS-SQL (Excel) 천 단위 구분자 표시해보자 (0) | 2023.09.01 |
MS-SQL 중복 데이터 삭제는 이렇게 하세요 (0) | 2023.09.01 |
MSSQL (EXCEL) 원 단위 절상, 절삭 하기 (1) | 2023.08.21 |