0Pricing
SQL Academy · レッスン

日付計算と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-31

2つのタイムスタンプの減算

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-30

CURRENT_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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 日付計算とINTERVAL
  2. EXTRACT、DATE_TRUNC、AGE
  3. タイムゾーン:TIMESTAMPとTIMESTAMPTZ
  4. よくある日付レポート(MTD、WoW、YoY)
← SQL Academyに戻る