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 'Sunday'
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
WHEN 3 THEN 'Wednesday'
WHEN 4 THEN 'Thursday'
WHEN 5 THEN 'Friday'
WHEN 6 THEN 'Saturday'
END AS party_day;

這個查詢將告訴你100天後的日期和那天的星期。對於派對計劃來說,這是完美的!

這就是它,各位!我們已經穿越了SQLite日期和時間的土地。記住,熟能生巧,所以不要害怕試驗這些函數。在你還沒有察覺之前,你將會成為日期和時間的魔法師!快樂編程!

Credits: Image by storyset