SQLite's date and time functions provide rich date processing capabilities:
-
Date Time Storage Format
- SQLite does not have a dedicated date time type
- Usually stored as TEXT (ISO8601 string), REAL (Julian day number), or INTEGER (Unix timestamp)
- Recommended to use TEXT type to store ISO8601 format: 'YYYY-MM-DD HH:MM:SS'
-
Main Date Time Functions
- date(): Returns date
- time(): Returns time
- datetime(): Returns date time
- julianday(): Returns Julian day number
- strftime(): Formats date time
- unixepoch(): Unix timestamp conversion
-
Getting Current Date Time
sql-- Current date SELECT date('now'); -- Output: 2026-02-18 -- Current time SELECT time('now'); -- Output: 11:24:00 -- Current date time SELECT datetime('now'); -- Output: 2026-02-18 11:24:00 -- Current Unix timestamp SELECT strftime('%s', 'now'); -- Output: 1739869440 -
Date Time Calculation
sql-- Add/subtract days SELECT date('now', '+7 days'); SELECT date('now', '-1 month'); -- Add/subtract time SELECT datetime('now', '+3 hours', '-30 minutes'); -- Calculate date difference SELECT julianday('now') - julianday('2026-01-01'); -
Date Time Formatting
sql-- Custom format SELECT strftime('%Y-%m-%d %H:%M:%S', 'now'); -- Common format specifiers -- %Y: 4-digit year -- %m: Month (01-12) -- %d: Day (01-31) -- %H: Hour (00-23) -- %M: Minute (00-59) -- %S: Second (00-59) -- %w: Day of week (0-6, 0=Sunday) -- %j: Day of year (001-366) -
Date Time Parsing
sql-- Parse string to date time SELECT datetime('2026-02-18 11:24:00'); -- Convert from Unix timestamp SELECT datetime(1739869440, 'unixepoch'); -- Convert from Julian day number SELECT datetime(2460585.974, 'julianday'); -
Date Time Comparison
sql-- Compare dates SELECT * FROM orders WHERE order_date > date('now', '-30 days'); -- Date range query SELECT * FROM events WHERE event_date BETWEEN date('now') AND date('now', '+7 days'); -
Practical Application Scenarios
sql-- Create orders table CREATE TABLE orders ( id INTEGER PRIMARY KEY, order_date TEXT, status TEXT ); -- Insert current time INSERT INTO orders (order_date, status) VALUES (datetime('now'), 'pending'); -- Query today's orders SELECT * FROM orders WHERE date(order_date) = date('now'); -- Query this week's orders SELECT * FROM orders WHERE order_date >= date('now', 'weekday 0', '-7 days'); -
Time Zone Handling
sql-- UTC time SELECT datetime('now', 'utc'); -- Local time SELECT datetime('now', 'localtime'); -- Time zone conversion SELECT datetime('now', '+8 hours'); -
Performance Optimization
- Create indexes for date columns
- Wrapping columns with functions causes index invalidation
- Consider using generated columns to store formatted dates
- Avoid using complex date functions in WHERE clauses
SQLite's date time functions are powerful and can meet most date processing needs.