[MySQL입문] DATETIME

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

🚀 날짜 데이터 타입

시간은 ‘2021년 4월 28일’ 이런식의 문자열 타입으로도 관리할 수 있지만 문자열 타입으로 관리한다면 시간끼리의 연산이 필요한다던지 할 때 까다로울 것이다. SQL 은 날짜에 관련된 전용 데이터 타입을 지원하니 이걸 사용하도록 하자.

image

  • 날짜 및 시간과 관련된 데이터 타입
    • 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)

image

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

image

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 년 전

image


✈ 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 의 연도만 추출

image

SELECT YEAR('20210428') -- 2021-08-28 의 연도만 추출
SELECT DAY('20210428') -- 2021-08-28 의 일만 추출

image



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

DB 카테고리 내 다른 글 보러가기

댓글 남기기