TIMESTAMPDIFF関数の精度がちょっと危うい感じです。
mysql> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2014-10-30 19:57:52 | +---------------------+ 1 row in set (0.00 sec) mysql> SELECT TIMESTAMPDIFF(MONTH, NOW(), '2014-12-01'); +-------------------------------------------+ | TIMESTAMPDIFF(MONTH, NOW(), '2014-12-01') | +-------------------------------------------+ | 1 | +-------------------------------------------+ 1 row in set (0.00 sec)
結果は2が欲しいんですけど。特定日時からの経過月数を計算するときはPERIOD_DIFF関数を使うのがベストなのでしょうかね。
mysql> SELECT PERIOD_DIFF(201412, 201410); +-----------------------------+ | PERIOD_DIFF(201412, 201410) | +-----------------------------+ | 2 | +-----------------------------+ 1 row in set (0.00 sec)
引数は日付型のまま扱いたいんですけどなあ。中途半p…
サーバとクライアントでCHARSETが一致していない環境でSELECT(UPDATEもかも)のWHERE句に日付をふくめるときにスラッシュを含めた表記していると意図したとおりに動作しないことがあるようです。
日付型のフォーマットにスラッシュを使ってはいけません(文字コードによって値が変わる) - [MySQL/SQL] ぺんたん info
これにハマってすげー悩んでた。MySQLってこえええええ / “日付型のフォーマットにスラッシュを使ってはいけません(文字コードによって値が変わる) - [MySQL/SQL] ぺんたん info” http://t.co/EngZr029vO
— JuNya (@jun_ya) October 29, 2014
基本的にCHARSETが揃っていない時点でダメなんでしょうけれど、テーブル単位、カラム単位で文字コードが設定できるそうでそういう時は大変だろうなあ。
日付の区切りはスラッシュ(/)じゃなくハイフン(-)にしといたほうが無難なのでしょうか。
(MySQLみたいなピーキーなデータベースエンジン、誰が使ってんだよ…すげーつらい)
— JuNya (@jun_ya) October 29, 2014