Shikata Ga Nai

Private? There is no such things.

第33回:日付データとシステム関数の活用法

Hello there, ('ω')ノ

データ分析において、「いつ」起こったかを記録する日付データは非常に重要です。 売上日、登録日、ログイン時間、キャンペーン開始日など、時間軸の情報は多くの場面で分析に使われます。


✅ 日付データでよくある問題

問題 内容
書式がバラバラ 例:2024/01/01、01-01-2024、"1月1日"など
時間がくっついている 例:2024-06-01 15:30:00 → 日付だけ使いたい
「月」「週」「曜日」で集計したい 日付からそれぞれの要素を取り出す必要あり

📆 日付データを使った集計の例

  • 月別売上の推移を出す
  • 曜日ごとのアクセス数を比べる
  • 昨日・先月など、相対的な日付を計算する
  • 対象期間のデータだけを抽出する(期間フィルタ)

🧰 Excelで使える日付関数

関数名 説明
TODAY() 今日の日付を返す =TODAY() → 2025/06/21
NOW() 現在の日時(時分秒つき) =NOW()
YEAR(A1) 年を抽出 =YEAR("2025/06/01") → 2025
MONTH(A1) 月を抽出 =MONTH("2025/06/01") → 6
DAY(A1) 日を抽出 =DAY("2025/06/01") → 1
TEXT(A1,"dddd") 曜日を取得 "月曜日"など日本語で表示
DATEDIF(A1,B1,"d") 日数の差を計算 2つの日付の差(日単位)を返す

🔸 実務でよく使う式例

  • 「何ヶ月前のデータか」を出す:
=DATEDIF(A2, TODAY(), "m") & "ヶ月前"
  • 「来月の1日」を求める:
=EOMONTH(TODAY(), 0) + 1

🧠 SQLでのシステム日付・日付関数の使い方(RDBMS共通)

関数 内容 例(PostgreSQL/SQL Server等)
CURRENT_DATE 現在の日付 SELECT CURRENT_DATE;
CURRENT_TIMESTAMP 現在の日時 SELECT CURRENT_TIMESTAMP;
EXTRACT(YEAR FROM 日付) 年を取り出す SELECT EXTRACT(YEAR FROM order_date)
DATE_PART('month', 日付) 月を取り出す PostgreSQLでよく使用
DATE_TRUNC('month', 日付) 月の初日に切り捨て 例:2025-06-15 → 2025-06-01

🔍 日付を条件にした抽出(例)

  • 今月のデータ:
SELECT * FROM sales
WHERE order_date >= DATE_TRUNC('month', CURRENT_DATE);
  • 過去30日のデータ:
SELECT * FROM access_log
WHERE access_time >= CURRENT_DATE - INTERVAL '30 days';

📊 日付の“分解”と“グループ化”の活用シーン

分析目的 使う要素 実例
月ごとの売上 月(MONTH) 「6月に一番売れた商品は?」
曜日別アクセス 曜日(WEEKDAY) 「金曜が一番アクセスが多い?」
時間帯別行動 時間(HOUR) 「12~13時に利用が集中している」
経過日数の算出 DATEDIF / 差分関数 「登録から30日以内のアクティブ率」

🔁 よくある日付整形のTips

やりたいこと 方法(Excel) 方法(SQL)
年月だけ表示 =TEXT(A1,"yyyy-mm") TO_CHAR(date, 'YYYY-MM')
文字列を日付に変換 =DATEVALUE("2025/6/1") CAST('2025-06-01' AS DATE)
日付を曜日に変換 =TEXT(A1,"dddd") TO_CHAR(date, 'Day')

✅ まとめ:日付データは「整理してこそ」使える!

ポイント 内容
日付は分析に不可欠 時系列・推移・傾向などのベースになる
分解と関数活用がカギ 年・月・曜日・経過日数などで再構成
ツールに応じた活用を ExcelでもSQLでも使える関数は多い
フォーマット統一が第一歩 書式ブレがあると処理に失敗しやすい!

Best regards, (^^ゞ