SQLite 的日期和时间函数如何使用?
SQLite 的日期和时间函数提供了丰富的日期处理能力:日期时间存储格式SQLite 没有专门的日期时间类型通常以 TEXT(ISO8601 字符串)、REAL(Julian 日数)或 INTEGER(Unix 时间戳)存储推荐使用 TEXT 类型存储 ISO8601 格式:'YYYY-MM-DD HH:MM:SS'主要日期时间函数date():返回日期time():返回时间datetime():返回日期时间julianday():返回 Julian 日数strftime():格式化日期时间unixepoch():Unix 时间戳转换获取当前日期时间 -- 当前日期 SELECT date('now'); -- 输出: 2026-02-18 -- 当前时间 SELECT time('now'); -- 输出: 11:24:00 -- 当前日期时间 SELECT datetime('now'); -- 输出: 2026-02-18 11:24:00 -- 当前 Unix 时间戳 SELECT strftime('%s', 'now'); -- 输出: 1739869440日期时间计算 -- 加减天数 SELECT date('now', '+7 days'); SELECT date('now', '-1 month'); -- 加减时间 SELECT datetime('now', '+3 hours', '-30 minutes'); -- 计算日期差 SELECT julianday('now') - julianday('2026-01-01');日期时间格式化 -- 自定义格式 SELECT strftime('%Y-%m-%d %H:%M:%S', 'now'); -- 常用格式说明符 -- %Y: 4位年份 -- %m: 月份 (01-12) -- %d: 日期 (01-31) -- %H: 小时 (00-23) -- %M: 分钟 (00-59) -- %S: 秒 (00-59) -- %w: 星期 (0-6, 0=周日) -- %j: 一年中的第几天 (001-366)日期时间解析 -- 解析字符串为日期时间 SELECT datetime('2026-02-18 11:24:00'); -- 从 Unix 时间戳转换 SELECT datetime(1739869440, 'unixepoch'); -- 从 Julian 日数转换 SELECT datetime(2460585.974, 'julianday');日期时间比较 -- 比较日期 SELECT * FROM orders WHERE order_date > date('now', '-30 days'); -- 日期范围查询 SELECT * FROM events WHERE event_date BETWEEN date('now') AND date('now', '+7 days');实际应用场景 -- 创建订单表 CREATE TABLE orders ( id INTEGER PRIMARY KEY, order_date TEXT, status TEXT ); -- 插入当前时间 INSERT INTO orders (order_date, status) VALUES (datetime('now'), 'pending'); -- 查询今天的订单 SELECT * FROM orders WHERE date(order_date) = date('now'); -- 查询本周的订单 SELECT * FROM orders WHERE order_date >= date('now', 'weekday 0', '-7 days');时区处理 -- UTC 时间 SELECT datetime('now', 'utc'); -- 本地时间 SELECT datetime('now', 'localtime'); -- 时区转换 SELECT datetime('now', '+8 hours');性能优化为日期列创建索引使用函数包装列会导致索引失效考虑使用生成列存储格式化日期避免在 WHERE 子句中使用复杂日期函数SQLite 的日期时间函数功能强大,能够满足大多数日期处理需求。