编辑
2025-09-28
SQLite
00

目录

SQLite 中的日期和时间表示
核心日期和时间函数
日期和时间修饰符
日期和时间计算
格式化日期和时间
时区处理
Julian 日期
日期和时间函数的性能考虑
结论

在数据库应用中,日期和时间的处理是一个常见而又关键的任务。SQLite 提供了一系列强大的内置函数来处理日期和时间,使得开发者能够轻松地进行时间相关的数据操作和计算。本文将深入探讨 SQLite 日期和时间函数的各个方面,包括其基本概念、主要函数、使用技巧以及最佳实践。

SQLite 中的日期和时间表示

SQLite 没有专门的日期和时间存储类型。相反,它使用以下方式存储日期和时间:

  1. TEXT:ISO8601 字符串格式("YYYY-MM-DD HH:MM
    .SSS")
  2. INTEGER:Unix 时间戳(自 1970-01-01 00:00:00 UTC 以来的秒数)
  3. REAL:Julian 日期数

这种灵活性使得 SQLite 能够适应各种日期时间表示方式,但也要求开发者在使用时更加谨慎。

核心日期和时间函数

SQLite 提供了以下核心日期和时间函数:

date(timestring, modifier, modifier, ...)

返回日期字符串。

SQL
SELECT date('now');

time(timestring, modifier, modifier, ...)

返回时间字符串。

SQL
SELECT time('now');

datetime(timestring, modifier, modifier, ...)

返回日期和时间字符串。

SQL
SELECT datetime('now');

julianday(timestring, modifier, modifier, ...)

返回 Julian 日期(浮点数)。

SQL
SELECT julianday('now');

strftime(format, timestring, modifier, modifier, ...)

返回格式化的日期和时间字符串。

SQL
SELECT strftime('%Y-%m-%d %H:%M', 'now');

image.png

日期和时间修饰符

SQLite 日期和时间函数支持多种修饰符,用于调整或修改日期时间:

  • NNN days:添加或减少天数
  • NNN hours:添加或减少小时数
  • NNN minutes:添加或减少分钟数
  • NNN seconds:添加或减少秒数
  • NNN months:添加或减少月数
  • NNN years:添加或减少年数
  • start of month:移动到当月开始
  • start of year:移动到当年开始
  • start of day:移动到当天开始
  • weekday N:移动到下一个星期 N(0=星期日,1=星期一,...)

示例:

SQL
SELECT date('now', '+1 day'); -- 返回明天的日期 SELECT datetime('now', 'start of month', '+1 month', '-1 day'); -- 返回当月最后一天

image.png

日期和时间计算

SQLite 允许进行日期和时间的计算:

计算两个日期之间的天数

SQL
SELECT julianday('2023-04-15') - julianday('2023-01-01') AS days_difference;

添加或减少时间

SQL
SELECT datetime('2023-04-15 12:00:00', '+2 hours', '30 minutes');

找出特定时间段

SQL
SELECT date('now', 'start of month', '+1 month', '-1 day') AS last_day_of_month;

image.png

格式化日期和时间

strftime() 函数提供了强大的日期时间格式化能力:

SQL
SELECT strftime('%Y-%m-%d %H:%M:%S', 'now'); SELECT strftime('%W', 'now'); SELECT strftime('%j', 'now');

image.png

常用格式说明符:

  • %Y:年份(4位数)
  • %m:月份(01-12)
  • %d:日(01-31)
  • %H:小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)
  • %w:星期几(0-6,0是星期日)

时区处理

SQLite 的日期时间函数默认使用 UTC。要处理本地时间,可以使用 'localtime' 修饰符:

SQL
SELECT datetime('now', 'localtime');

注意:SQLite 不直接支持复杂的时区操作。对于需要处理多个时区的应用,建议在应用层面处理时区转换。

Julian 日期

Julian 日期表示从公元前 4714 年 11 月 24 日中午开始的天数。它在日期计算中非常有用:

SQL
-- 计算两个日期之间的精确天数 SELECT (julianday('2023-04-15') - julianday('2023-01-01')) AS days_difference; -- 计算年龄 SELECT (julianday('now') - julianday('1990-01-01')) / 365.25 AS age;

image.png

日期和时间函数的性能考虑

  1. 索引:对于频繁查询的日期列,考虑创建索引。
  2. 存储格式:对于需要大量日期计算的场景,存储为 INTEGER(Unix 时间戳)可能更高效。
  3. 批量操作:在处理大量日期时,考虑使用批量操作而不是逐行处理。

结论

SQLite 的日期和时间函数提供了强大而灵活的工具集,使得开发者能够高效地处理各种时间相关的数据操作和计算。从简单的日期格式化到复杂的时间间隔计算,这些函数几乎可以满足所有日常开发中遇到的日期和时间处理需求。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!