ray88’s diary

お仕事で困ったとき用の自分用の覚書

シリアル値の日付をSQLで変換する方法

SQL 目次 - ray88’s diary

DOMO 目次 - ray88’s diary

Excelで作成したデータをデータベースに取り込む際、日付列がシリアル値(数値)として保存されてしまうことがあります。この場合、SQLを使って正しい日付形式に変換する必要があります。以下のSQL式を使用することで、この問題を解決できます:

IFERROR(DATE_FORMAT(DATE_ADD('1899-12-30', interval `年月日` day), '%Y-%m-%d'), `年月日`)

式の説明

  1. DATE_ADD('1899-12-30', interval `年月日` day)
    • '1899-12-30'を基準日として、シリアル値(年月日列)の日数を加算します。
    • Excelのシリアル値は1900年1月1日が1となるため、その1日前を基準としています。
  2. DATE_FORMAT(..., '%Y-%m-%d')
    • 得られた日付を'YYYY-MM-DD'形式にフォーマットします。
  3. IFERROR(..., `年月日`)
    • 変換に失敗した場合(無効な日付など)、元のシリアル値をそのまま返します。

注意点

  • この式では基準日を1899年12月30日としていますが、これはExcelの日付計算の特殊性によるものです。
  • Excelは誤って1900年をうるう年として扱っているため、実際の1900年1月1日は、シリアル値の2に相当します。
  • この「バグ」は後方互換性のために修正されていないため、SQL側で1日前の1899年12月30日を基準とすることで対応しています。

この式を使用することで、Excelのシリアル値を正しい日付形式に変換し、データベース内で適切に扱うことができます。