日付計算とINTERVAL
INTERVALで日付を加算・減算し、期間を計算し、「過去7日間」のような相対日付フィルターを作成します。
「日付計算とINTERVAL」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
日付と時刻の型の振り返り
PostgreSQLの基本的な時間関連の型は4つあります。
DATE— 時刻を含まない暦日TIME— 時刻TIMESTAMP— タイムゾーンを含まない日付と時刻TIMESTAMPTZ— 日付と時刻とタイムゾーン(イベントにはこちらを推奨します)
INTERVAL:時間の長さ
INTERVAL は期間を表します。日付やタイムスタンプに加算したり、そこから減算したりできます。
SELECT NOW() + INTERVAL '1 day';
SELECT NOW() - INTERVAL '30 days';
SELECT NOW() + INTERVAL '3 months 2 weeks';
SELECT INTERVAL '1 hour' + INTERVAL '15 minutes';INTERVALの単位
year, month, week, day, hour, minute, second を使用できます(単数形と複数形のどちらも使用できます)。
SELECT INTERVAL '2 years 6 months';
SELECT INTERVAL '1 week';
SELECT INTERVAL '90 seconds';よく使う相対日付フィルター
「直近N日」のクエリは、日付処理の基本です。
SELECT * FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';
SELECT * FROM events
WHERE created_at >= CURRENT_DATE - INTERVAL '1 month';DATEへの日数の加算
PostgreSQLでは、date + integer を「N日を加算する」処理として使用することもできます。
SELECT DATE '2024-01-01' + 30; -- 2024-01-31
SELECT DATE '2024-01-01' - 1; -- 2023-12-312つのタイムスタンプの減算
2つのタイムスタンプの差はINTERVALになります。
SELECT NOW() - '2024-01-01'::TIMESTAMP;
-- → '125 days 14:30:00'
SELECT EXTRACT(EPOCH FROM (NOW() - created_at))/3600 AS hours_ago
FROM events;AGE:人間にとって読みやすい差分
AGE(end, start) は、年・月・日のINTERVALを返します。
SELECT AGE(NOW(), birth_date) AS age_interval
FROM users WHERE id = 1;
SELECT EXTRACT(YEAR FROM AGE(birth_date)) AS age_in_years
FROM users;月の加算には注意
月の加算は暦に基づく計算です。2024-01-31 + 1 month = 2024-02-29 のように、日付が調整されます。
SELECT DATE '2024-01-31' + INTERVAL '1 month'; -- 2024-02-29
SELECT DATE '2024-03-31' + INTERVAL '1 month'; -- 2024-04-30CURRENT_DATEとNOW()の違い
戻り値の型が異なるため、目的に合う方を選択します。
SELECT CURRENT_DATE; -- 2024-03-15 (DATE)
SELECT CURRENT_TIME; -- 14:30:00+02 (TIMETZ)
SELECT CURRENT_TIMESTAMP; -- 2024-03-15 14:30:00+02 (TIMESTAMPTZ)
SELECT NOW(); -- alias for CURRENT_TIMESTAMP構成要素からの日付の作成
整数の列から日付を作成します。
SELECT MAKE_DATE(year, month, day) FROM birthdays;
SELECT MAKE_TIMESTAMP(2024, 3, 15, 14, 30, 0.0);日付式へのインデックス
created_at のインデックスは範囲クエリを効率よく処理します。「3月のイベント」を取得する場合は、月単位への切り捨てよりも範囲フィルターの方が高速です。
-- Index-friendly:
WHERE created_at >= '2024-03-01' AND created_at < '2024-04-01';
-- Less friendly (works only with expression index):
WHERE date_trunc('month', created_at) = '2024-03-01';振り返り
SQLの日付演算は豊富で信頼性があります。
- 期間にはINTERVAL
- 直接加算・減算する
- 人間にとって読みやすい期間にはAGE
- インデックスに最も適しているのは半開区間
確認問題
直近7日間のイベントを取得する式はどれですか?
よくある質問
「日付計算とINTERVAL」レッスンは無料ですか?
はい。「日付計算とINTERVAL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「日付計算とINTERVAL」で何を学びますか?
INTERVALで日付を加算・減算し、期間を計算し、「過去7日間」のような相対日付フィルターを作成します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「日付計算とINTERVAL」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。