SQLite - 日付と時間

こんにちは、将来のプログラマーたち!今日は、SQLiteにおける日付と時間の fascinante な世界に飛び込みます。あなたの近所の親切なコンピュータ教師として、私は多くの例と説明を交えてこの旅を案内します。所以、シートベルトを締めて、始めましょう!

SQLite - Date & Time

時間文字列

SQLiteでは、日付と時間は通常、テキスト文字列として保存されます。初めて聞くと奇妙に思うかもしれませんが、実際には非常に柔軟で扱いやすいです。以下の一般的な形式を見てみましょう。

ISO8601 形式

最も一般的な形式は ISO8601 で、以下のようになります:

YYYY-MM-DD HH:MM:SS

例えば:

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

これは、2023年6月15日14時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
('Birthday Party', '2023-07-01'),
('Movie Night', '2023-07-15 20:00'),
('Morning Jog', '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;

このクエリは、今日の日付、明日の日付、1ヶ月前の日付、その月の初日、次の月曜日を表示します。非常に便利ですね!

フォーマッタ

フォーマッタは日付と時間の世界のスタイリストのようなものです。彼らは私たちが日付と時間をさまざまな方法で表示するのを助けてくれます。

strftime() 関数

フォーマットに使用する主な関数は strftime() で、「string format time」を意味します。基本的な構文は以下の通りです:

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

以下は一般的な format スペシファイヤです:

スペシファイヤ 説明
%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)、そして1ヶ月後の日付を表示します。

楽しい例

最後に楽しい例で締め括りましょう。パーティを計画していて、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