平成30/ 2018-10-21 05:33
mysql 日付 計算

日付を、varchar に登録しててハマった。
結果だけいえば、
varcharで日付管理してる場合で、計算する場合、空のもの、NULLのものは計算対象外( 1つも評価しない )にしないと期待どおりの計算結果が返ってこないということ。


fixed_at   varchar(19) not null default ''
created_at datetime

で、こんなデータがある場合、

fixed_at              | created_at
--------------------------------------------------------
2012-08-08 10:00:00   | 2012-08-08 10:00:00
                      | 2012-08-08 10:00:00
2012-08-08 10:00:00   | 2012-08-08 10:00:00


current_date - date(created_at)
だと期待通りの計算結果がでるが、

current_date - date(fixed_at)
とすると、結果は全て、NULL になってしまう( 一部とかでなく )

型を合わせてもダメ。
current_date - date( cast( fixed_at as datetime ) )

どうやら、1つでも空やNULLがあると日付計算できない型を認識されるようだ。

なので、以下のようにしたら、期待値とれた。

where句であれば、

fixed_at <> '' and
( current_date - date( fixed_at ) ) > 3

select句であれば

case when fixed_at = '' then 0 else ( current_date - date( fixed_at ) ) end