乐闻世界logo
搜索文章和话题

SQLite 的日期和时间函数如何使用?

2月18日 21:33

SQLite 的日期和时间函数提供了丰富的日期处理能力:

  1. 日期时间存储格式

    • SQLite 没有专门的日期时间类型
    • 通常以 TEXT(ISO8601 字符串)、REAL(Julian 日数)或 INTEGER(Unix 时间戳)存储
    • 推荐使用 TEXT 类型存储 ISO8601 格式:'YYYY-MM-DD HH:MM:SS'
  2. 主要日期时间函数

    • date():返回日期
    • time():返回时间
    • datetime():返回日期时间
    • julianday():返回 Julian 日数
    • strftime():格式化日期时间
    • unixepoch():Unix 时间戳转换
  3. 获取当前日期时间

    sql
    -- 当前日期 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
  4. 日期时间计算

    sql
    -- 加减天数 SELECT date('now', '+7 days'); SELECT date('now', '-1 month'); -- 加减时间 SELECT datetime('now', '+3 hours', '-30 minutes'); -- 计算日期差 SELECT julianday('now') - julianday('2026-01-01');
  5. 日期时间格式化

    sql
    -- 自定义格式 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)
  6. 日期时间解析

    sql
    -- 解析字符串为日期时间 SELECT datetime('2026-02-18 11:24:00'); -- 从 Unix 时间戳转换 SELECT datetime(1739869440, 'unixepoch'); -- 从 Julian 日数转换 SELECT datetime(2460585.974, 'julianday');
  7. 日期时间比较

    sql
    -- 比较日期 SELECT * FROM orders WHERE order_date > date('now', '-30 days'); -- 日期范围查询 SELECT * FROM events WHERE event_date BETWEEN date('now') AND date('now', '+7 days');
  8. 实际应用场景

    sql
    -- 创建订单表 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');
  9. 时区处理

    sql
    -- UTC 时间 SELECT datetime('now', 'utc'); -- 本地时间 SELECT datetime('now', 'localtime'); -- 时区转换 SELECT datetime('now', '+8 hours');
  10. 性能优化

    • 为日期列创建索引
    • 使用函数包装列会导致索引失效
    • 考虑使用生成列存储格式化日期
    • 避免在 WHERE 子句中使用复杂日期函数

SQLite 的日期时间函数功能强大,能够满足大多数日期处理需求。

标签:Sqlite