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

날짜, Boolean, 실용 타입

~14 min · schema, dates, boolean, types

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

SQLite에 없는 두 타입

SQLite에는 DATE나 DATETIME 타입이 없고 BOOLEAN도 없어. 둘 다 기존 타입 위에 얹은 관습이야. 날짜를 담는 데 쓸 만한 방법은 세 가지야.

  • ISO 8601 TEXT'2026-05-03 12:00:00' 같은 모양이야. 사람이 읽기 좋고, 문자열로 정렬해도 순서가 맞고, SQLite 날짜 함수가 전부 알아들어. 이걸 기본으로 삼아.
  • Unix epoch INTEGER — 1970년 이후 흐른 초야. 작고, 비교가 빠르고, 어느 언어에서든 다루기 쉬워. 숫자 범위로 크게 걸러내야 할 때 좋아.
  • Julian Day REAL — 천문학 쪽 관습이야. 앱 코드 입장에서 이게 정답인 경우는 거의 없어.

Boolean은 SQLite가 0과 1을 정수로 저장하고 TRUEFALSE literal도 받아줘. 이건 1과 0으로 컴파일돼. 그래서 어디서나 이런 모양이 보여. archived INTEGER NOT NULL DEFAULT 0.

Self-reference: 피파의 conversations 테이블이 created_atupdated_at에 ISO 8601 text를 쓰는 이유가 있어. JSONL ground truth도 ISO 8601이거든. 그러면 둘을 byte 단위로 맞대볼 수 있고, 싹 지우고 다시 재생해서 복구하는 과정이 단순해져.

Code

중요한 날짜 함수·sql
SELECT datetime('now');                       -- 2026-05-03 12:00:00
SELECT date('now');                           -- 2026-05-03
SELECT strftime('%Y-%m-%dT%H:%M:%fZ', 'now'); -- 2026-05-03T12:00:00.000Z
SELECT unixepoch('now');                       -- 1747900800

-- 포맷 간 비교
SELECT datetime(unixepoch('now'), 'unixepoch'); -- text 로 round-trip

-- 최근 row 필터
SELECT * FROM messages
WHERE  created_at >= datetime('now', '-1 day');
Boolean — INTEGER로 저장하고, 그대로 조건에 써·sql
CREATE TABLE flags (id INTEGER PRIMARY KEY, archived INTEGER NOT NULL DEFAULT 0) STRICT;

INSERT INTO flags(archived) VALUES (TRUE);   -- 1 로 저장
INSERT INTO flags(archived) VALUES (FALSE);  -- 0 으로 저장

SELECT * FROM flags WHERE archived;          -- WHERE 1 -> 매치
SELECT * FROM flags WHERE NOT archived;      -- 0 row 매치

External links

Exercise

created_at 컬럼을 가진 작은 events 테이블에서 날짜를 세 가지로 저장해봐. ISO 8601 text, Unix epoch 정수, Julian Day. 각각에 대해 '최근 24시간 row'를 뽑는 같은 query를 써보고, 100,000 row 테이블에서 시간을 재. 그리고 뭘 기본으로 삼을지 한 단락으로 추천해봐.

Progress

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

댓글 0

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

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