sql >> データベース >  >> RDS >> Mysql

DjangoでMySQLからの部分的な日付(2010-00-00)を処理するにはどうすればよいですか?

    まず、すべての回答に感謝します。それらのどれも、そのままでは私の問題の良い解決策ではありませんでしたが、あなたの弁護のために、私はすべての要件を与えなかったことを付け加えなければなりません。しかし、それぞれが私の問題について考えるのに役立ち、あなたのアイデアのいくつかは私の最終的な解決策の一部です。

    したがって、DB側での私の最終的な解決策は、 varcharを使用することです。 フィールド(10文字に制限)および 00 を使用したISO形式(YYYY-MM-DD)での文字列としての日付の格納 月や日がない月と日(日付など) MySQLのフィールド)。このように、このフィールドは任意のデータベースで機能し、データは、単純なクライアント(mysqlクライアント、phpmyadminなど)を使用して、人間が直接簡単に読み取り、理解、編集できます。それが要件でした。変換などを行わずにExcel/CSVにエクスポートすることもできます。欠点は、形式が強制されないことです(Djangoを除く)。誰かが「日付ではない」と書くことができます または、形式を間違えると、DBがそれを受け入れます(この問題についてのアイデアがある場合...)。

    このようにして、すべての特別を実行することもできます。 日付のクエリ 比較的簡単にフィールド。 WHEREを使用したクエリの場合:<、>、<=、> =、および=は直接機能します。 INクエリとBETWEENクエリも直接機能します。日または月でクエリを実行するには、EXTRACT(DAY | MONTH ...)を使用する必要があります。直接注文することもできます。したがって、クエリのすべてのニーズをカバーし、ほとんど複雑になることはないと思います。

    ジャンゴ側では、2つのことをしました。まず、PartialDateを作成しました ほとんどがdatetime.dateのようなオブジェクト ただし、月や日を含まないサポート日。このオブジェクト内で、datetime.datetimeオブジェクトを使用して日付を保持します。時間と分を1に設定したときに月と日が有効かどうかを示すフラグとして使用しています。これは、 stevehaと同じ考え方です。 提案しますが、実装は異なります(クライアント側のみ)。 datetime.datetimeを使用する オブジェクトは、日付を操作するための多くの優れた機能(検証、比較など)を提供します。

    次に、PartialDateFieldを作成しました これは主にPartialDate間の変換を処理します オブジェクトとデータベース。

    これまでのところ、それはかなりうまく機能しています(私はほとんどの場合、広範な単体テストを終了しています)。



    1. SQL Serverにリンクサーバーログインを追加する(T-SQLの例)

    2. SpringMySQLとRowCallbackHandlerを使用して大規模なデータセットを管理する方法

    3. Laravel 4:雄弁な場所または雄弁な場所で複数

    4. MySQLのデータベーストランザクション内のCodeception受け入れテスト