【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を返してきます。
コメント