MENU

VARCHAR型の日付から数年前のデータを抽出する方法【PostgreSQL】

こんにちは、SIer勤務のごりらSEです。

本記事では、VARCHAR型日付から「現在日付の○年前」以降のデータを抽出する方法について、具体的なSQLクエリとともに紹介します。

目次

【前提】テーブル定義

今回は以下のテーブル定義を前提で解説します。

・テーブル名:sample_table
・日付のカラム名:date_str
・フォーマット:yyyyMMdd
・データ型:VARCHAR

作成に使用したCREATE文はこちらです。

CREATE TABLE sample_table (
  date_str VARCHAR(8)
);

数年前の同日以降を抽出するクエリ(TO_DATEを使う方法)

TO_DATEを使う方法では、以下のクエリで2年前の同日以降を抽出できます。

今日が2025-05-06の場合、2023-03-06以降のデータを抽出します。

SELECT *
FROM sample_table
WHERE TO_DATE(date_str, 'YYYYMMDD') >= CURRENT_DATE - INTERVAL '2 years';
要素意味
TO_DATE(date_str, ‘YYYYMMDD’)date_str(VARCHAR型)をDATE型に変換
CURRENT_DATE今日の日付(DATE型)
INTERVAL ‘2 years’「2年」という期間(INTERVAL型)
– 演算子DATE型 – INTERVAL型の引き算(結果はDATE型)

TO_DATEはフォーマット指定が必要なため、変換対象の文字列には指定のフォーマット形式で正しく格納されている必要があります。万一不正な日付文字列が含まれているとエラーになるため注意が必要です。

数年前の同日以降を抽出するクエリ(CASTを使う方法)

CASTを使う方法では、以下のクエリで2年前の同日以降を抽出できます。

SELECT *
FROM sample_table
WHERE CAST(date_str AS DATE) >= CURRENT_DATE - INTERVAL '2 years';
要素意味
CAST(date_str AS DATE)date_str(VARCHAR型)をDATE型に変換
CURRENT_DATE今日の日付(DATE型)
INTERVAL ‘2 years’「2年」という期間(INTERVAL型)
– 演算子DATE型 – INTERVAL型の引き算(結果はDATE型)

CASTはフォーマット指定をできないため、PostgreSQLの自動解釈頼みになります。
そのため、変換対象の文字列は’yyyy-MM-dd’形式や’yyyyMMdd’形式であれば認識できますが、これら以外の’yyyy/MM/dd’形式などは動くことがありますが、推奨できません。

TO_DATEとCASTのどちらを使うか

処理速度ではCASTの方がTO_DATEより高速です。そのため、以下の使い分けが良いです。

データ件数が多い・形式が統一されているならCAST
データ品質が保証されない・フォーマットが特殊ならTO_DATE

まとめ

VARCHAR型の日付から数年前のデータを抽出する方法を2パターン紹介しました。

ぜひ状況に応じて活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

・20代
・IT未経験からSIerに就職、開発とプロジェクト管理を経験
・働いている中で会計に興味を持ち、日商簿記1級取得
・筋トレ最高!

コメント

コメントする

目次