日付・時間の整理

データ型とタイムゾーンを揃える

  • 日付や時間のデータはすべて datetime型 または timestamp型 に統一する
  • タイムゾーンは基点が日本なら JST(UTC+9) を基準とする(複数タイムゾーンが必要な場合は例外)
  • unixtime をそのまま使うのは絶対に避ける

日付や時間の区分を作る

  • BIツール等で動的に変更できない場合は年/月/四半期/週/日でよく使うものを作る
    • 四半期・週の始まりをどこに置くかは別途定義する
  • 時間は 0〜23 時の数値またはゼロ埋めの文字列(例:"01"
  • 区分は文字列型で作ることもある
  • 先頭に数字を付けずに別にソート用の列を作る方法もある
種類
2025(文字列型) / 2025-01-01(日付型)
202501 / 2025-01-01
四半期 Q1,Q2...
曜日 01_月,...,07_日
時間 01,02... / 0,1,2...
時間帯 01_朝,02_昼,03_夜

営業日/休日フラグを作る

  • 曜日や月末月初など単純なルールで把握できない特殊なケースはフラグを作るのが良い
    • 国民の祝日
    • 年末年始休み
    • お盆休み
    • 企業独自の休日
  • フラグは 営業日: true/false休日種別: "祝日" / "年末年始" などでもよい。
  • 曜日だけで判定可能な場合はあえて作らなくてもよい

正しくない日付への対処

  • エラーではないが値として正しくない場合はそのままにしておくと集計時に困る
種類 内容の例 よくある原因 対応方針例
不完全な日付 2025-01, 202501, 2025 日付のはずが年月までしか記録されていない 月までしかなければ1日にする
実在しない日付 2024-04-31, 2025-02-29 日付型への変換ミスなど 翌月1日/NULLにする/固定日付に置換
非現実的な日付 2100-01-01, 1900-01-01 初期値の設定ミス、入力ミス、システム側のエラー NULLにする
時系列の不整合 start2025-01-01end2024-02-01 初期値の設定ミス、入力ミス、システム側のエラー カラム名がずれているだけなら直す。システム側の問題ならば修正を依頼する
想定期間の範囲外 キャンペーン期間が2024-12-01 ~ 12-25なのに11-30のデータが入る 設定し忘れで購入が発生、キャンペーンの延期、テストデータなど NULLにする/除外

実態とカラム名の不整合への対処

  • 中身と名前がずれているならば修正する
  • 以下は代表的な例。命名規則の詳細は別途定義する
実態 カラム名 修正例
UTC xxx_jst xxx_utc
日時 xxx_date xxx_datetime
日付 xxx_at xxx_date