본문 바로가기
C.W.K.
Stream
Lesson 10 of 10 · published

날짜와 시간 함수

~14 min · sql, dates, functions

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

날짜 함수 여섯 개와 modifier

SQLite의 날짜·시간 함수는 여섯 개고, 전부 같은 modifier 묶음을 받아. 날짜 산술은 이 modifier가 다 해. 그러니 modifier를 외워. 함수 자체는 쉬워.

  • date(time, modifiers...) — YYYY-MM-DD를 돌려줘.
  • time(time, modifiers...) — HH:MM:SS를 돌려줘.
  • datetime(time, modifiers...) — YYYY-MM-DD HH:MM:SS를 돌려줘.
  • julianday(time, modifiers...) — Julian day를 REAL로 돌려줘.
  • strftime(format, time, modifiers...) — 원하는 형식으로 찍어줘.
  • unixepoch(time, modifiers...) — 3.38부터 돼. 1970년 이후 초를 돌려줘.

손에 익혀둘 modifier는 이런 것들이야.

  • '+N days', '-N hours', '+N minutes' 같은 상대 이동.
  • 'start of month', 'start of year', 'start of day'로 경계에 붙이기.
  • 'weekday N'은 다음 요일로 옮겨줘. 0이 일요일이고 6이 토요일이야.
  • 'localtime''utc'로 타임존을 옮겨.
Tip: datetime('now')는 항상 UTC를 돌려줘. 현지 시각으로 저장할 거면 offset도 같이 저장하든가, 쓰는 시점에 UTC로 바꿔. 타임존이 섞인 컬럼은 두고두고 버그를 뿜어내.

Code

흔한 날짜 query·sql
-- 어제
SELECT date('now', '-1 day');

-- 이번 달 시작
SELECT date('now', 'start of month');

-- 다음 월요일
SELECT date('now', 'weekday 1');

-- 기존 컬럼 포맷
SELECT strftime('%Y-%m', created_at) AS year_month, count(*)
FROM   messages GROUP BY year_month ORDER BY year_month;

-- 최근 7 일 활동
SELECT * FROM messages
WHERE  created_at >= datetime('now', '-7 days');

-- text -> epoch -> text round-trip
SELECT datetime(unixepoch('2026-05-03 12:00:00'), 'unixepoch');

External links

Exercise

messages 테이블에서 날짜 query를 다섯 개 써봐. 오늘 들어온 message, 이번 주에 들어온 message, 최근 6개월의 월별 개수, message를 보내는 시간대의 중앙값(정의는 네가 합리적으로 잡아), 그리고 한 conversation 안에서 연속된 message 사이의 가장 긴 공백. 빌트인 날짜 함수만 써.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.