[MySQL입문] DATETIME
카테고리: DB
인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
🚀 날짜 데이터 타입
시간은 ‘2021년 4월 28일’ 이런식의 문자열 타입으로도 관리할 수 있지만 문자열 타입으로 관리한다면 시간끼리의 연산이 필요한다던지 할 때 까다로울 것이다. SQL 은 날짜에 관련된 전용 데이터 타입을 지원하니 이걸 사용하도록 하자.
- 날짜 및 시간과 관련된 데이터 타입
- 1️⃣ date (연/월/일)
- 2️⃣ time (시/분/초)
- 3️⃣ datetime (연/월/일/시/분/초)
🚀 시간 출력
SELECT CAST('20210418' AS DATETIME)
SELECT CAST('20210418 15:27:45' AS DATETIME)
SELECT CAST('20210418 15:27' AS DATETIME)
CAST
는 형변환해주는 함수이다. 문자열을 DATETIME
데이터 타입으로 형변환 해주는 코드이다.
- 패턴
- YYYYMMDD
- YYYYMMDD hh:mm:ss.nnn
- YYY-MM-DDhh:mm
위 3 가지 패턴에 해당하는 문자열을 입력하면 알아서 잘 받아들인다. 정확히 위 3 가지 패턴과 일치할 필요는 없고 좀 덜 입력해도 된다. 첫 번째와 세 번째 문자열은 각각 시간과 초를 덜 입력하였는데 DATETIME
으로 잘 형변환되어 출력된 것을 확인 가능
🚀 현재 시간 출력
🔥 GETDATE()
SELECT GETDATE();
DATETIME 타입으로 현재 시간을 출력해주는 함수이다. SQL 표준은 아니다.
🔥 CURRENT_TIMESTAMP
SELECT CURRENT_TIMESTAMP
마찬가지로 DATETIME 타입으로 현재 시간을 출력해준다. SQL 표준이며, 함수는 아니다.
🔥 GETUTCDATE
-- 현재의 UTC 시간 (GMT 표준시계 기준)
SELECT GETUTCDATE();
현재의 UTC 시간을 출력해주는 함수이다. 글로벌하게 여러 국가에서 사용하는 프로그램의 DB 에서 필수로 사용해야 할 함수..
🚀 시간 연산
🔥 자동 형변환
INSERT INTO [dbo].[DateTimeTest]
([time])
VALUES
(CAST('20100101' AS DATETIME));
GO
INSERT INTO [dbo].[DateTimeTest]
([time])
VALUES
('20210418') --자동 cast 됨
GO
DateTimeTest 테이블의 time
열은 애초에 데이터 타입을 datetime
으로 지정을 해놨기 때문에 문자열 ‘20100101’ 로 행 추가를 한다 하더라도 문제없이 자동 형변환되어 datetime 타입으로 들어가게 된다. 따라서 CAST
로 형변환 안해주어도 문제 없다.
🔥 시간 연산
✈ 시간 범위
SELECT *
FROM DateTimeTest
WHERE time >= CAST('20100101' AS DATETIME); --time 에서 2010년 1월 1일 이상값을 가진 행들 출력
SELECT *
FROM DateTimeTest
WHERE time >= '20100101'; --time 에서 2010년 1월 1일 이상값을 가진 행들 출력
SELECT *
FROM DateTimeTest
WHERE time >= CURRENT_TIMESTAMP; --time 에서 현재 시간 이상값을 가진 행들 출력
마찬가지로 자동 형변환 된다.
✈ DATEADD
n 일후, n 초 후, n 년 후 이렇게 시간끼리의 덧셈 연산을 할 수 있다.
SELECT DATEADD(YEAR, 1, '20210428') -- 2021-04-28 에서 1 년 후
SELECT DATEADD(DAY, 5, '20210428') -- 2021-04-28 에서 5 일 후
SELECT DATEADD(SECOND, 1, '20210428') -- 2021-04-28 에서 1 초 후
SELECT DATEADD(YEAR, -10, '20210428') -- 2021-04-28 에서 10 년 전
✈ DATEDIFF
두 시간 사이의 첫 번째 인수를 기준으로 한 시간 차를 구해준다.
(세 번째인수 - 두 번째인수)로 연산을 하기 떄문에 두번째 인수가 더 크면 음수가 나오기도 한다.
SELECT DATEDIFF(SECOND, '20210428', '20210503') --2021-04-28 과 20210503 의 초 단위 차이
SELECT DATEDIFF(SECOND, '20210828', '20210503') --2021-08-28 과 20210503 의 초 단위 차이
✈ 시간의 일부만 추출
DATEPART
함수를 사용하거나YEAR
,SECOND
이런식으로 함수를 쓰면 된다.
SELECT DATEPART(YEAR, '20210428') -- 2021-08-28 의 연도만 추출
SELECT YEAR('20210428') -- 2021-08-28 의 연도만 추출
SELECT DAY('20210428') -- 2021-08-28 의 일만 추출
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기