SQLite - 날짜와 시간

안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 SQLite에서 날짜와 시간의 fascineting 세상으로 뛰어들어 보겠습니다. 여러분의 친절한 이웃 컴퓨터 선생님이자 저는 많은 예제와 설명을 통해 여러분을 안내하겠습니다. 그러면 끈을 꽉 조이고 시작해 보겠습니다!

SQLite - Date & Time

시간 문자열

SQLite에서 날짜와 시간은 일반적으로 텍스트 문자열로 저장됩니다. 초반에는 이상하게 느껴질 수 있지만, 사실 매우 유연하고 쉽게 다룰 수 있습니다. 몇 가지 일반적인 형식을 살펴보겠습니다.

ISO8601 형식

가장 일반적인 형식은 ISO8601로, 다음과 같습니다:

YYYY-MM-DD HH:MM:SS

예를 들어:

'2023-06-15 14:30:00'

이는 2023년 6월 15일 오후 2:30을 나타냅니다.

다른 허용된 형식

SQLite는 날짜와 시간 형식에 매우 관대합니다. 다른 허용된 형식을 몇 가지 소개합니다:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS

예제를 시도해 보겠습니다:

CREATE TABLE events (
id INTEGER PRIMARY KEY,
event_name TEXT,
event_date TEXT
);

INSERT INTO events (event_name, event_date) VALUES
('Birthday Party', '2023-07-01'),
('Movie Night', '2023-07-15 20:00'),
('Morning Jog', '06:30');

SELECT * FROM events;

이렇게 하면 다양한 날짜와 시간 형식의 테이블이 생성됩니다. 꽤 멋진 일 아닙니까?

수정자

이제 수정자에 대해 이야기해 보겠습니다. 수정자는 날짜와 시간을 조작할 수 있는 특별한 키워드입니다. 이들은 시간 문자열의 마법의 지팡이와도 같습니다!

일반 수정자

다음은 일반적인 수정자 표입니다:

수정자 설명
+N days 날짜에 N일을 더합니다
-N days 날짜에서 N일을 뺍니다
start of month 날짜를 월의 첫날로 변경합니다
start of year 날짜를 연의 첫날로 변경합니다
weekday N 날짜를 주 N(0=일요일, 1=월요일, 등)에서 다음 날짜로 변경합니다

이제 이들을 실제로 사용해 보겠습니다:

SELECT
date('now') AS today,
date('now', '+1 day') AS tomorrow,
date('now', '-1 month') AS last_month,
date('now', 'start of month') AS month_start,
date('now', 'weekday 1') AS next_monday;

이 쿼리는 오늘의 날짜, 내일의 날짜, 한 달 전의 날짜, 현재 월의 시작일, 다음 월요일의 날짜를 보여줍니다. 매우 유용하죠?

포맷터

포맷터는 날짜와 시간의 스타일리스트와도 같습니다. 그들이 우리를 돕고 다양한 방식으로 날짜와 시간을 표시합니다.

strftime() 함수

포맷팅을 위한 주요 함수는 strftime()입니다. 이 함수는 "string format time"을 의미합니다. 기본 문법은 다음과 같습니다:

strftime(format, time-string, modifiers...)

다음은 일반적인 형식 지시자입니다:

지시자 설명
%Y 연도 (4자리)
%m 월 (01-12)
%d 월의 날 (01-31)
%H 시 (00-23)
%M 분 (00-59)
%S 초 (00-59)
%w 주의 날 (0-6, 일요일=0)

이제 모든 것을 합쳐 보겠습니다:

SELECT
strftime('%Y-%m-%d', 'now') AS date_only,
strftime('%H:%M', 'now') AS time_only,
strftime('%Y-%m-%d %H:%M:%S', 'now') AS date_time,
strftime('%w', 'now') AS day_of_week,
strftime('%Y-%m-%d', 'now', '+1 month') AS next_month;

이 쿼리는 현재 날짜, 현재 시간, 현재 날짜와 시간, 주의 날(0-6), 한 달 후의 날짜를 보여줍니다.

재미있는 예제

마지막으로 재미있는 예제를 하나 더 보여드리겠습니다. 당신이 파티를 계획하고, 100일 후에 어떤 요일인지 알고 싶다면:

SELECT
strftime('%Y-%m-%d', 'now', '+100 days') AS party_date,
CASE cast(strftime('%w', 'now', '+100 days') AS INTEGER)
WHEN 0 THEN 'Sunday'
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
WHEN 3 THEN 'Wednesday'
WHEN 4 THEN 'Thursday'
WHEN 5 THEN 'Friday'
WHEN 6 THEN 'Saturday'
END AS party_day;

이 쿼리는 100일 후의 날짜와 요일을 보여줍니다. 파티 계획에 완벽합니다!

그리고 여러분! 우리는 SQLite의 날짜와 시간의 땅을 여행했습니다. 연습이 완벽을 만들어 준다는 것을 기억하고, 이 함수들을 실험해 두시오. 당신은 곧 날짜와 시간의 마법사가 될 것입니다! 행복하게 코딩하세요!

Credits: Image by storyset