SQLite - 日期和时间

你好,有抱负的程序员们!今天,我们将深入探索SQLite中日期和时间的迷人世界。作为你友好的计算机老师邻居,我将通过大量的示例和解释来引导你完成这次旅程。那么,系好安全带,让我们开始吧!

SQLite - Date & Time

时间字符串

在SQLite中,日期和时间通常以文本字符串的形式存储。这在一开始可能看起来有点奇怪,但实际上它非常灵活且易于操作。让我们来看看一些常见的格式:

ISO8601格式

最常见的是ISO8601格式,看起来像这样:

YYYY-MM-DD HH:MM:SS

例如:

'2023-06-15 14:30:00'

这代表2023年6月15日下午2:30。

其他接受格式

SQLite在日期和时间格式方面非常宽容。以下是一些其他接受的格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS

让我们试一个例子:

CREATE TABLE events (
id INTEGER PRIMARY KEY,
event_name TEXT,
event_date TEXT
);

INSERT INTO events (event_name, event_date) VALUES
('生日派对', '2023-07-01'),
('电影之夜', '2023-07-15 20:00'),
('早晨慢跑', '06:30');

SELECT * FROM events;

这将创建一个包含不同日期和时间格式的表。很酷吧?

修饰符

现在,让我们来谈谈修饰符。这些是允许我们操作日期和时间的特殊关键字。它们就像是我们时间字符串的魔法棒!

常见修饰符

以下是一些常见修饰符的表格:

修饰符 描述
+N days 向日期添加N天
-N days 从日期中减去N天
start of month 将日期更改为月份的第一天
start of year 将日期更改为年份的第一天
weekday N 将日期更改为下一个星期N的日期(0=星期日,1=星期一,等等)

让我们看看这些修饰符的实际应用:

SELECT
date('now') AS today,
date('now', '+1 day') AS tomorrow,
date('now', '-1 month') AS last_month,
date('now', 'start of month') AS month_start,
date('now', 'weekday 1') AS next_monday;

这个查询将显示今天的日期、明天的日期、一个月前的日期、当前月份的开始以及下一个星期一的日期。非常方便,对吧?

格式化器

格式化器就像是日期和时间的造型师。它们帮助我们以不同的方式展示日期和时间。

strftime()函数

我们用于格式化的主要函数是strftime()。它代表“字符串格式化时间”。以下是基本语法:

strftime(format, time-string, modifiers...)

让我们来看看一些常见的格式指定符:

指定符 描述
%Y 年份(4位)
%m 月份(01-12)
%d 月份中的日期(01-31)
%H 小时(00-23)
%M 分钟(00-59)
%S 秒钟(00-59)
%w 星期中的日期(0-6,星期日=0)

现在,让我们把所有的东西放在一起:

SELECT
strftime('%Y-%m-%d', 'now') AS date_only,
strftime('%H:%M', 'now') AS time_only,
strftime('%Y-%m-%d %H:%M:%S', 'now') AS date_time,
strftime('%w', 'now') AS day_of_week,
strftime('%Y-%m-%d', 'now', '+1 month') AS next_month;

这个查询将显示当前日期、当前时间、当前日期和时间、星期中的日期(0-6)以及从现在起一个月的日期。

一个有趣的例子

让我们用一个有趣的例子来结束。想象你正在计划一个派对,你想知道100天后是星期几:

SELECT
strftime('%Y-%m-%d', 'now', '+100 days') AS party_date,
CASE cast(strftime('%w', 'now', '+100 days') AS INTEGER)
WHEN 0 THEN '星期日'
WHEN 1 THEN '星期一'
WHEN 2 THEN '星期二'
WHEN 3 THEN '星期三'
WHEN 4 THEN '星期四'
WHEN 5 THEN '星期五'
WHEN 6 THEN '星期六'
END AS party_day;

这个查询将告诉你100天后的日期和那天是星期几。这对于派对计划来说非常完美!

就这样,伙计们!我们已经穿越了SQLite的日期和时间领域。记住,熟能生巧,所以不要害怕尝试这些函数。在你意识到之前,你将成为一个日期和时间的大师!快乐编码!

Credits: Image by storyset