PostgreSQLで日付から年と月を抽出する4つの方法(to_char()関数を使わない方法も解説)
PostgreSQLで日付から年と月を抽出する(to_char()関数を使わない方法)
そこで、今回はto_char()
関数を使わずに、日付型から年と月を抽出する方法をいくつか紹介します。
EXTRACT関数を使う
EXTRACT()
関数は、日付型から年、月、日などの要素を抽出する関数です。
-- 年を抽出
SELECT EXTRACT(YEAR FROM date_column);
-- 月を抽出
SELECT EXTRACT(MONTH FROM date_column);
CASE
式を使うと、条件に応じて異なる値を返すことができます。
-- 年と月を別々の列で抽出
SELECT
CASE
WHEN date_column >= '2024-01-01' AND date_column < '2025-01-01' THEN '2024'
ELSE '2025'
END AS year,
EXTRACT(MONTH FROM date_column) AS month;
-- 年月を結合した文字列を抽出
SELECT
CASE
WHEN date_column >= '2024-01-01' AND date_column < '2025-01-01' THEN '202401'
ELSE '202502'
END AS year_month;
日付型から直接算出する
PostgreSQLでは、日付型を整数に変換することで、年と月を直接算出することができます。
-- 年を抽出
SELECT date_column / 10000;
-- 月を抽出
SELECT (date_column % 10000) / 100;
-- サンプルデータ
CREATE TABLE sample_table (
id INT,
date_column DATE
);
INSERT INTO sample_table (id, date_column) VALUES
(1, '2024-03-08'),
(2, '2024-04-12'),
(3, '2025-01-01');
-- EXTRACT関数を使う
SELECT
EXTRACT(YEAR FROM date_column) AS year,
EXTRACT(MONTH FROM date_column) AS month
FROM sample_table;
-- CASE式を使う
SELECT
CASE
WHEN date_column >= '2024-01-01' AND date_column < '2025-01-01' THEN '2024'
ELSE '2025'
END AS year,
EXTRACT(MONTH FROM date_column) AS month
FROM sample_table;
-- 日付型から直接算出する
SELECT
date_column / 10000 AS year,
(date_column % 10000) / 100 AS month
FROM sample_table;
to_char()
関数を使わずに、PostgreSQLで日付型から年と月を抽出する方法をいくつか紹介しました。それぞれの方法にはメリットとデメリットがあるので、状況に合わせて使い分けてください。
-- サンプルデータ
CREATE TABLE sample_table (
id INT,
date_column DATE
);
INSERT INTO sample_table (id, date_column) VALUES
(1, '2024-03-08'),
(2, '2024-04-12'),
(3, '2025-01-01');
-- EXTRACT関数を使う
SELECT
EXTRACT(YEAR FROM date_column) AS year,
EXTRACT(MONTH FROM date_column) AS month
FROM sample_table;
-- CASE式を使う
SELECT
CASE
WHEN date_column >= '2024-01-01' AND date_column < '2025-01-01' THEN '2024'
ELSE '2025'
END AS year,
EXTRACT(MONTH FROM date_column) AS month
FROM sample_table;
-- 日付型から直接算出する
SELECT
date_column / 10000 AS year,
(date_column % 10000) / 100 AS month
FROM sample_table;
| year | month |
|---|---|
| 2024 | 3 |
| 2024 | 4 |
| 2025 | 1 |
| year | month |
|---|---|
| 2024 | 3 |
| 2024 | 4 |
| 2025 | 1 |
| year | month |
|---|---|
| 2024 | 3 |
| 2024 | 4 |
| 2025 | 1 |
解説
- 最初に、
sample_table
というテーブルを作成し、id
とdate_column
という2つの列を定義しています。 - 次に、
date_column
に3つの日付値を挿入しています。 - 3つの方法それぞれで、
date_column
から年と月を抽出しています。 - 最後に、抽出結果を出力しています。
各方法の詳細
- EXTRACT関数を使う
EXTRACT()
関数を使う方法は、最もシンプルで分かりやすい方法です。EXTRACT()
関数には、YEAR
やMONTH
などの引数を指定することで、日付型から特定の要素を抽出することができます。
- CASE式を使う
CASE
式を使う方法は、条件に応じて異なる値を返すことができます。この例では、date_column
が2024年1月1日以降2025年1月1日より前の場合は「2024」、それ以外は「2025」というように、年を抽出しています。
- 日付型から直接算出する
PostgreSQLでは、日付型を整数に変換することで、年と月を直接算出することができます。この例では、date_column
を10000で割ることで年を、100で割ることで月を抽出しています。
PostgreSQLで日付から年と月を抽出するその他の方法
date_part()
関数は、日付型から年、月、日などの要素を抽出する関数です。EXTRACT()
関数と似ていますが、より多くのオプションが用意されています。
-- 年を抽出
SELECT date_part('year', date_column);
-- 月を抽出
SELECT date_part('month', date_column);
PostgreSQLの型変換機能を使う
-- 年を抽出
SELECT LEFT(date_column::text, 4);
-- 月を抽出
SELECT RIGHT(LEFT(date_column::text, 7), 2);
PL/pgSQLは、PostgreSQLの拡張言語です。PL/pgSQLを使って、独自の関数を作成することで、年と月を抽出することができます。
CREATE FUNCTION extract_year_month(date_column DATE) RETURNS VARCHAR(6) AS
BEGIN
RETURN LEFT(date_column::text, 4) || RIGHT(LEFT(date_column::text, 7), 2);
END;
SELECT extract_year_month(date_column) FROM sample_table;
sql postgresql