• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLのdatetime型に0月0日を格納)

MySQLのdatetime型に0月0日を格納する方法

このQ&Aのポイント
  • MySQLのdatetime型カラムに不明な日付を格納する方法について考えています。具体的なパターンは、YYYY-MM-DD、YYYY-MM、YYYYの3つです。一般的には不明な日付を0または1で置き換えて格納する方法がありますが、それぞれの方法には利点と欠点があります。MySQL的に問題ない方法を知りたいです。
  • 日付が不明なデータをMySQLのdatetime型カラムに格納したいですが、正しい方法を知りたいです。具体的なパターンは、YYYY-MM-DD、YYYY-MM、YYYYの3つです。一般的には不明な日付を0または1で置き換えて格納する方法がありますが、それぞれの方法には利点と欠点があります。
  • MySQLのdatetime型カラムに不明な日付を格納する方法について知りたいです。具体的なパターンは、YYYY-MM-DD、YYYY-MM、YYYYの3つです。一般的には不明な日付を0または1で置き換えて格納する方法がありますが、それぞれの方法にはメリットとデメリットがあります。MySQL的に問題ない方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

一応、0月0日 は許容されています。 年は4桁指定で 2014-00-00 , 2013-03-00 のようになるべく省略せず指定すべきではありますが。マニュアルみるとinsert時の年月日指定フォーマットは、結構柔軟に対処されます。 where 文で比較するときは、そのような日付は、2014-00-00 であれば2013前年より後で、2014-01-01より前と解釈されます。 http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-types.html 「SQL モード」でも許容されるかが変わるので、ご注意ください

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-types.html
re97
質問者

お礼

回答ありがとうございましたー

その他の回答 (2)

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 datetime型では、完全な日付時刻しか扱うことが出来ないです。  残念ですが、案1を実験してみれば、エラーになったと思います。  日付しか扱わないのであれば・・・  年・月・日の3つのintフィールドを準備して、不明の部分には、nullを入れるくらいしか思いつけないですね。  この場合、日付計算に関わる部分は、PHP側で処理をするしか有りません。  sql側でも日付処理が必要な何かがあるのであれば、年月日フィールドとは別に、datetimeフィールドを持ち、不明の月や日にはデフォルトで1を適用するくらいかなぁ。この場合は、不明な1か明らかな1かは、月・日のフィールドから判定可能です。  このフィールドを持つと、情報が冗長化しますので、年・月・日の各フィールドとdatetimeフィールドの整合性は、php側で保証してあげる必要があります。  文字列で、不明フィールドを0にした日付を持たせるのも一案かと思います。案1の形式で、datetime型を使わずに、char型にしてしまうという手です。  この場合も、日付計算は、PHP側でやらないとしかたがないですね。まともに、sqlで型変換するエラーになってしまいますから。

re97
質問者

お礼

回答ありがとうございましたー

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

MySQL + PHP という環境で月日が不明な場合がある というのであれば 日付の取得や計算はPHPのみでやってしまい MySQLのカラムは文字列で設定し 日付を文字列格納するというのも一案としてありだと思います

re97
質問者

お礼

回答ありがとうございましたー

関連するQ&A