Excelで作成したデータをデータベースに取り込む際、日付列がシリアル値(数値)として保存されてしまうことがあります。この場合、SQLを使って正しい日付形式に変換する必要があります。以下のSQL式を使用することで、この問題を解決できます:
IFERROR(DATE_FORMAT(DATE_ADD('1899-12-30', interval `年月日` day), '%Y-%m-%d'), `年月日`)
式の説明
DATE_ADD('1899-12-30', interval `年月日` day)
- '1899-12-30'を基準日として、シリアル値(
年月日
列)の日数を加算します。 - Excelのシリアル値は1900年1月1日が1となるため、その1日前を基準としています。
- '1899-12-30'を基準日として、シリアル値(
DATE_FORMAT(..., '%Y-%m-%d')
- 得られた日付を'YYYY-MM-DD'形式にフォーマットします。
IFERROR(..., `年月日`)
- 変換に失敗した場合(無効な日付など)、元のシリアル値をそのまま返します。
注意点
- この式では基準日を1899年12月30日としていますが、これはExcelの日付計算の特殊性によるものです。
- Excelは誤って1900年をうるう年として扱っているため、実際の1900年1月1日は、シリアル値の2に相当します。
- この「バグ」は後方互換性のために修正されていないため、SQL側で1日前の1899年12月30日を基準とすることで対応しています。
この式を使用することで、Excelのシリアル値を正しい日付形式に変換し、データベース内で適切に扱うことができます。