ADD_MONTHS
add_months() 関数は、指定した月数を指定した日付またはタイムスタンプに加算します。
入力日付が月末である場合、または加算後の月の日数を超える場合、結果は新しい月の末日に調整されます。それ以外の場合は、元の日が保持されます。
構文
ADD_MONTHS(<date_or_timestamp>, <number_of_months>)
戻り値の型
TIMESTAMP または DATE 型を返します
例
基本的な月の加算
SELECT ADD_MONTHS('2023-01-15'::DATE, 3);
├───────────────────────────────────┤
│ 2023-04-15 │
╰───────────────────────────────────╯
月の減算
SELECT ADD_MONTHS('2023-06-20'::DATE, -4);
├─────────────────────────────────────┤
│ 2023-02-20 │
╰─────────────────────────────────────╯
月末調整
SELECT ADD_MONTHS('2023-01-31'::DATE, 1);
├───────────────────────────────────┤
│ 2023-02-28 │
╰───────────────────────────────────╯
タイムスタンプを保持する場合
SELECT ADD_MONTHS('2023-03-15 14:30:00'::TIMESTAMP, 5);
├─────────────────────────────────────────────────┤
│ 2023-08-15 14:30:00.000000 │
╰─────────────────────────────────────────────────╯
月末日を使用する場合
CREATE TABLE contracts (
id INT,
sign_date DATE,
duration_months INT
);
INSERT INTO contracts VALUES
(1, '2023-01-15', 12),
(2, '2024-02-28', 6),
(3, '2023-11-30', 3);
SELECT
id,
sign_date,
ADD_MONTHS(sign_date, duration_months) AS end_date
FROM contracts;
├─────────────────┼────────────────┼────────────────┤
│ 1 │ 2023-01-15 │ 2024-01-15 │
│ 2 │ 2024-02-28 │ 2024-08-28 │
│ 3 │ 2023-11-30 │ 2024-02-29 │
╰───────────────────────────────────────────────────╯