본문 바로가기

문과 코린이의, [C#] 기록/문과 코린이의, [SQL] 기록

[문과 코린이의 IT 기록장] MSSQL - SQL Server 데이터 형식 (SQL Server 데이터 형식, char vs varchar, nchar vs nvarchar, 정수 데이터 크기와 범위, Boolean, 날짜, 시간 데이터 형식)

반응형

[문과 코린이의 IT 기록장] MSSQL - SQL Server 데이터 형식 (SQL Server 데이터 형식, char vs varchar, nchar vs nvarchar, 정수 데이터 크기와 범위, Boolean, 날짜, 시간 데이터 형식)

[문과 코린이의 IT 기록장] MSSQL - SQL Server 데이터 형식 (SQL Server 데이터 형식, char vs varchar, nchar vs nvarchar, 정수 데이터 크기와 범위, Boolean, 날짜, 시간 데이터 형식)

 


< 참고 영상 강의 >

MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.1 - 인프런 | 강의 (inflearn.com)

 

MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.1 - 인프런 | 강의

데이터베이스 구축에서부터 테이블 생성, 각종 SQL 쿼리문을 사용해서 데이터베이스 내 데이터를 조작, 변경할 수 있습니다., MSSQL로 시작하는 데이터베이스 학습 -데이터를 다양하게 조작, 변경,

www.inflearn.com

2022.01.19 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 기본키, 외래키 ( 기본키 (Primary Key) , 외래키 (Foreign Key), 관계형 데이터베이스란?)

 

[문과 코린이의 IT 기록장] MSSQL - 기본키, 외래키 ( 기본키 (Primary Key) , 외래키 (Foreign Key), 관계형

[문과 코린이의 IT 기록장] MSSQL -  기본키, 외래키 ( 기본키 (Primary Key) , 외래키 (Foreign Key), 관계형 데이터베이스란?) < 참고 강의 영상 > MSSQL Server 2016 기반의 데이터베이스..

vansoft1215.tistory.com

2022.01.19 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 집합 연산자 (관계형 데이터베이스(DBMS) vs 집합, 합집합, 차집합, 교집합, 곱집합, 프로젝션, 셀렉션, 조인/디비전)

 

[문과 코린이의 IT 기록장] MSSQL - 집합 연산자 (관계형 데이터베이스(DBMS) vs 집합, 합집합, 차집합,

[문과 코린이의 IT 기록장] MSSQL - 집합 연산자 (관계형 데이터베이스(DBMS) vs 집합, 합집합, 차집합, 교집합, 곱집합, 프로젝션, 셀렉션, 조인/디비전) < 참고 영상 강의 > MSSQL Server 20..

vansoft1215.tistory.com

2022.01.19 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - DB & Table 생성 (데이터베이스 만들기, 테이블 만들기)

 

[문과 코린이의 IT 기록장] MSSQL - DB & Table 생성 (데이터베이스 만들기, 테이블 만들기)

[문과 코린이의 IT 기록장] MSSQL - DB & Table 생성 (데이터베이스 만들기, 테이블 만들기) < 참고 영상 강의 > MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.1 - 인프런 | 강의..

vansoft1215.tistory.com


1. SQL Server 데이터 형식

1) 숫자/수치 관련 

- 정수 데이터 : bigint(8byte), int(4), smallint(2), tinyint(1)

 * 1byte = 8bit = 2^8 = 256 => 0-255까지 표현 가능

- 실수 데이터 : float, real

 

2) 날짜와 시간 관련

- date, time, datetime, smalldatetime, datetime2, datetimeoffset

 

3) 문자열 관련 

- 기본 문자열 : char, varchar, text 

 ex. char(10) : 영어 - 10자 입력 가능 / 한글 - 한 글자당 2byte로 차지 (5개 입력 가능)

- 유니코드 문자열 : nchar, nvarchar, ntext 

 ex. nchar(10) : 영어 - 10자 입력 가능 / 한글 - 10개 입력 가능

- 이진 문자열 : binary, varbinary, image

 

4) 실습

 

새 테이블 만들기
열 이름, 데이터 형식 지정 후 저장
상위 200개 행 편집
조건을 벗어나면 오류 발생


2. char vs varchar

ex. char(10) : 영어 - 10자 입력 가능 / 한글 - 한 글자당 2byte로 차지 (5개 입력 가능)

1) char(10)

- var(variable)가 없다는 것은 고정적인 것이라는 의미

- 10의 범위라면 입력되지 않고 남은 공간은 공백으로 처리된다.

 * 즉 abc입력시, 남는 7공간은 공백으로 처리된다는 것

 * 즉, 처음 선언된 범위 그대로 모두 사용된다. 따라서, 입력되는 값이 선언된 길이보다 작다면 공간낭비가 발생한다.

- 고정길이의 값이 입력되는 경우에만 char로 지정하는 것이 좋다.

 ex. 사번, 주민번호 (O) / 이름, 주소 (X)

- 4글자 미만시에는, char로 설정하는 것이 속도면에서 유리하다.

 

2) varchar(n | max)

- var(variable)가변적인 길이 타입을 의미한다.

- 입력되는 값이 8000byte를 초과하는 경우, max사용이 가능하며, 최대 2GB까지 저장 가능하다.

- varchar(10)일 경우 abc를 입력한다면, 실제 입력된 길이 3byte만 공간을 차지하며 남은 7byte값은 반환하게 된다.

 

# char, varchar 모두 최대 크기8000byte이다. ex. char(8000)까지 가능하다는 것

8000byte까지 사용 가능
MAX사용

< DBMS 데이터 형식 >
- 데이터 형식은 DBMS마다 형식이 다르다.
 * 따라서, 해당 DBMS를 다루는 과정에서 별도로 공부해야 한다.
 * 어느 하나를 잘 공부해두면 다른 DBMS 공부가 쉽다.
- 초보자는 기본적으로 주력으로 사용하게 될 DBMS에 맞춰 공부한 후, 다른 DBMS 데이터 형식도 살펴보도록 한다.

3. nchar vs nvarchar

ex. nchar(10) : 영어 - 10자 입력 가능 / 한글 - 10개 입력 가능

1) nchar(n)

- 유니코드(Unicode) 문자열 데이터 타입

- char(n) 타입과의 차이는, n 길이가 1-4000 사이 값이다. (8000이 X)

- 한 문자가 2byte이므로, 실제 저장소 크기는 n의 2배이다.

 

2) nvarchar(n | max)

- n은 1-4000 사이 값이다.

- 실제 저장소 크기는 n의 2배이며, max는 2GB까지 가능.


4. 정수 데이터 크기와 범위

- 보통 우리가 DB관련 업무에서 가장 많이 접하게 된다.

- 실수 사용보다는 정수 사용을 많이한다.

 : bigint(8), int(4), smallint(2), tinyint(1)

 * 주의할 점은, 0과 음수 포함 범위를 고려해야 한다는 것이다.

 * bigint, int, smallint는 음수포함.     

 * Most Significant Bit(MSB) : 최상위 비트는 부호비트 구분용 비트 (1이면 음수, 0이면 양수)

 ex 1. smallint = 2^15 = 32768 => 따라서 -32768 ~ 0 && 0 ~ 32767 (16번째 bit는 부호구분용 비트)

 ex 2. int = 2^31 => 따라서 -2^31 ~ (2^31)-1

 


5. Boolean

- Boolean 데이터 타입은, True / False 값을 가질 수 있다.

- DBMS별로 이 데이터 타입을 구현하는 것은 조금씩 다 다르며, 이를 지원하지 않는 DBMS도 존재한다.

- SQL Server는 이 데이터 타입을 지원하지 않는다.

- 그러나 bit라는 데이터 타입을 통해서, 0 / 1 / NULL의 값을 가질 수 있다.

 


6. 날짜, 시간 데이터 형식

- date

- datetime

- smalldatetime

 

- 초의 정밀도를 높여주기 위해 생긴 데이터타입

: datetime2

: datetimeoffset * 애플리케이션을 전 세계로 배포시 datetimeoffset을 사용하면 표준 시간대가 지원됨.

: time

 

< 시간대란? >

- 경도 0도에 있는 그리니치 천문대를 기준으로 한 시간 차이. (각 지역(나라)에 따른 시각의 차이)

- 즉, 지구 자전에 따른 각 지역 사이에 발생하는 시간 차이로 생기는, 낮과 밤의 차이인위적으로 조정하기 위해서 만든 것.

- 과거에는 세계시간의 표준을 영국의 그리니치 천문대(GMT)를 기준으로 했으며, 이후 협정 시간대(UTC)로 대체하게 되었다.

 * 한국 기준으로는 UTC 시간에 +9를 해주면, 한국 환산 시간이 된다. ex. UTC = 3시, 한국 = 12시

 


1) date

DECLARE @aaa date; -- aaa 변수 선언
SET @aaa = GETDATE(); -- aaa 변수에 값(현재시각) 세팅
SELECT @aaa AS 'DATE'; -- aaa 변수의 값을 출력해라 (열 이름 : DATE)

- 기본 문자열 리터럴 형식 : YYYY-MM-DD * 리터럴(literal) : 문자 그대로의

- 길이 : 10자리 (정확도 : 1일)

- 범위 : 0000-01-01부터 9999-12-31까지

 

< 실습 >

새 쿼리 클릭
코드 입력
결과물


2) Datetime

DECLARE @aaa datetime; -- aaa 변수 선언
SET @aaa = GETDATE(); -- aaa 변수에 값(현재시각) 세팅
SELECT @aaa AS 'DATETIME'; -- aaa 변수의 값을 출력해라 (열 이름 : DATETIME)

- 기본 문자열 리터럴 형식 : YYYY-MM-DD hh:mm:ss[.mmm]

- 길이 : 최소 19자리부터 최대 23자리까지 (정확도 : .000) * 초 이하는 생략이 가능하기 때문 (000으로 출력)

- 범위 : 1753-01-01부터 9999-12-31까지

코드 입력
결과물


3) Datetime 2

 * 초의 정밀도가 더욱 높아짐

 * 소수점 7자리까지 가능 

DECLARE @aaa datetime2; -- aaa 변수 선언
SET @aaa = GETDATE(); -- aaa 변수에 값(현재시각) 세팅
SELECT @aaa AS 'DATETIME2'; -- aaa 변수의 값을 출력해라 (열 이름 : DATETIME2)

- 기본 문자열 리터럴 형식 : YYYY-MM-DD hh:mm:ss[.소수 자릿수 초]

- 길이 : 최소 19자리부터 최대 27자리까지 (정확도 : 100나노초(ns))

- 작은 수치를 표현하는데 사용되는 단위
a. 밀리 (1천분의 1) ex. 1초 -> 1,000 밀리초
b. 마이크로 (1백만분의 1) ex. 1초 -> 1,000,000 마이크로초
c. 나노 (10억분의 일) ex. 1초 -> 1,000,000,000 나노초

- 범위(날짜) : 0001-01-01부터 9999-12-31까지

- 범위(시간) : 00:00:00부터 23:59:59.9999999까지

코드 1
결과 1
코드 2
결과 2

 * DATETIME2는 소수점 지정이 가능하지만, DATETIME은 소수점 지정이 불가능하다.

 


4) Time

 * 이 또한 초의 정밀도를 높여주는 데이터 형식

- 기본값 : 00:00:00

- 기본 문자열 리터럴 형식 -> hh:mm:ss[.nnnnnnn]

- 범위 : 00:00:00.0000000 -> 23:59:59.9999999까지

- 길이 : 최소 8자리(hh:mm:ss) ~ 최대 16자리(hh:mm:ss.nnnnnnn)까지

코드 1
결과 1
코드 2
결과 2


5) SYSDATETIME / SYSDATETIMEOFFSET

- SYSDATETIME / SYSDATETIMEOFFSET

: SQL Server 2008버전부터 지원하기 시작한 타입들

: 기존 GETDATE함수보다 더 정밀하고 정교한 시간을 반환

 

- SYSDATETIMEOFFSET함수는 시간대 정보까지 포함해서 반환

 ex. 2200-12-25 09:50:34.1234567 + 09:00

 

SYSDATETIME 코드
SYSDATETIME 결과
SYSDATETIMEOFFSET 코드
SYSDATETIMEOFFSET 결과

* SYSDATETIMEOFFSET은 형식을 datetimeoffset을 사용해야함. (시간대 정보까지 포함해서 가져오는 것)


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형