SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【MySQL】不完全な日付を検出する

日付の整合性チェックはアプリ側の責任だというのがMySQLの言い分です。
データベース側は渡されれば「2010/02/29」や「2000/00/13」のような日付でも格納してしまいます。

アプリ側(phpなど)での日付チェックの方法は置いといて、
今回は、データベースに格納されてしまった不完全な日付を検出する方法です。

方法は簡単。日付関数 DAYOFYEAR() を使います。

例)

SELECT DAYOFYEAR('2010/02/29'), DAYOFYEAR('2009/00/13'), DAYOFYEAR('2008/2/29');

結果)

+-------------------------+-------------------------+------------------------+
| DAYOFYEAR('2010/02/29') | DAYOFYEAR('2009/00/13') | DAYOFYEAR('2008/2/29') |
+-------------------------+-------------------------+------------------------+
|                  [NULL] |                  [NULL] |                     60 |
+-------------------------+-------------------------+------------------------+

MySQLは「日付チェックはしないよ」といいながら、日付の計算ロジックは持っています。
計算できない不完全な日付について各種関数は、0やNULLを返してきます。

関連するメモ

コメント