2020. 11. 16. 14:12

데이터 형식과 변환 쿼리.

- 데이터 변환.

ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 데이터타입

 

SQL Server의 데이터 형식에는 그 종류가 30개 가까이 된다고 한다. 이러한 데이터 형식의 종류를 다외우는 것은 무리가 있으며, 거의 사용하지 않는 데이터 형식도 있기 때문에, 다 외울 필요는 없다. 자주 사용되는 데이터 형식은 별표(★)로 구분 되어 있다.

 

1.1 숫자 데이터 형식

숫자형 데이터 형식은 정수, 실수 등의 숫자를 표현한다.

데이터 형식바이트 수숫자 범위설명

★ BIT 1 0 또는 1 또는 NULL Boolean 형인 참(True, 1), 거짓(False, 0)에 사용
★ TINYINT 1 0 ~ 255 양의 정수
★ SMALLINT 2 -32,768 ~ 32,767 정수
★ INT 4 약 -21억 ~ + 21억 정수
★ BIGINT 8 ~ 정수
★ DECIMAL(p, [s]) 5 ~ 17 ~ + 고정 정밀도(p)와 배율(s)을 가진 숫자형. 예) decimal(5, 2)는 전체 자릿수를 5자리로 하되, 그 중 소수점 이하를 2자리로 하겠다는 의미
NUMERIC 5 ~ 17 ~ + DECIMAL과 같은 데이터 형식
★ FLOAT[(p)] 4 ~ 8   p가 25미만이면 4바이트, 25 이상이면 8 바이트의 크기를 할당
REAL 4   FLOAT(24)와 같음
MONEY 8 ~ + 화폐 단위로 사용
SMALLMONEY 4 약 -21억 ~ +21억 화폐 단위로 사용

 

1.2 문자 데이터 형식

데이터 형식바이트 수설명

★ CHAR[(n)] 0 ~ 8,000 고정길이 문자형, Character의 약자
★ NCHAR([n]) 0 ~ 8,000 글자로는 0~4,000자. 유니코드 고정길이 문자형. National Character의 약자
★ VARCHAR[(n | max)] 0 ~ (2GB) 가변길이 문자형. n을 사용하면 1 ~ 8,000까지 크기를 지정할 수 있고, max로 지정하면 최대 2GB, 크기를 지정할 수 있음. Variable Character의 약자
★ NVARCHAR[(n | max)] 0 ~ 유니코드 가변길이 문자형. n을 사용하면 1~4,000까지 크기를 지정할 수 있고, max로 지정하면 최대 2GB, 크기를 지정할 수 있음. National Variable Character의 약자
BINARY[(n)] 0 ~ 8,000 고정길이의 이진 데이터 값
★ VARBINARY[(n | max)] 0 ~ 가변길이의 이진 데이터 값. n을 사용하면 1 ~ 8,000까지 크기를 지정할 수 있고, max로 지정하면 최대 2GB, 크기를 지정할 수 있음. 이미지/동영상 등을 저장하기 위해 사용됨. Variable Binary의 약자

CHAR형식은 고정길이 문자형이므로 자릿수가 고정되어 있다. 예를들어, CHAR(100)'ABC' 3바이트만 저장해도, 전체 100바이트에서 3바이트만 사용하고, 나머지 97바이트는 사용하지 않기때문에 공간이 낭비가 되게 된다. 이에 반해, VARCHAR형식은 가변길이 문자형이기 때문에 VARCHAR(100)'ABC' 3바이트를 저장할 경우 3바이트만 사용하게 된다.

한글(유니코드)을 저장하기 위해서 CHAR/VARCHAR 형식을 사용하게 되면 2배의 자리수를 설정해야 한다. 예를들어, 최대 3글자의 한글을 저장하기 위해서는 CHAR(6)/VARCHAR(6)으로 설정해야하는데, 그 이유는 한글이 2바이트를 차지하기 때문이다. 따라서, 영어가 아닌 한글과 같은 다른 언어에 대해서는 NCHAR(3)/NVARCHAR(3) 형식을 사용하면 된다. 만약, 해당 컬럼이 한글을 사용하지 않고 영어만 사용할 경우에는 NCHAR/NVARCHAR보다 CHAR/VARCHAR가 더 공간을 적게 차지하기 때문에 CHAR/VARCHAR를 사용하는 것이 좋다.

 

1.3 날짜와 시간 데이터 형식

데이터 형식바이트 수설명

DATETIME 8 날짜는 1753-1-1~9999-12-31까지 저장되며, 시간은 00:00:00~23:59:59.997까지 저장됨. 정확도는 밀리초(1/1000초) 단위까지 인식. "YYYY-MM-DD 시:분:초"로 사용.
★ DATETIME2 6 ~ 8 날짜는 0001-1-1~9999-12-31까지 저장되며, 시간은 00:00:00~23:59:59.9999999까지 저장됨. 정확도는 100나노초 단위까지 인식. 형식은 "YYYY-MM-DD 시:분:초"로 사용.
★ DATE 3 날짜는 0001-1-1~9999-12-31까지 저장. 날짜 형식만 사용됨. "YYYY-MM-DD"형식으로 사용됨
★ TIME 5 00:00:00.00000000~23:59:59.9999999까지 저장. 정확도는 100나노 초 단위까지 인식됨. "시:분:초"형식으로 사용

 

위의 데이터 날짜 데이터 형식을 예를 통해서 알아보자.

-- DATETIME
SELECT CAST('2018-10-22 12:35:29.123' AS datetime) AS 'datetime'
-- DATETIME2
SELECT CAST('2018-10-22 12:35:29.1234567 +12:15' AS datetime2) AS 'datetime2'
-- DATE
SELECT CAST('2018-10-22 12:35:29.1234567 +12:15' AS date) AS 'date'
-- TIME
SELECT CAST('2018-10-22 12:35:29.1234567 +12:15' AS time) AS 'time'

출처: https://excelsior-cjh.tistory.com/186 [EXCELSIOR]