sql >> Databáze >  >> RDS >> Mysql

Jak se vypořádat s dílčími daty (2010-00-00) z MySQL v Django?

Předem děkuji za všechny vaše odpovědi. Žádný z nich, jak je, nebyl dobrým řešením mého problému, ale na vaši obranu bych měl dodat, že jsem neuvedl všechny požadavky. Ale každý z nich mi pomůže přemýšlet o mém problému a některé z vašich nápadů jsou součástí mého konečného řešení.

Takže moje konečné řešení na straně DB je použít varchar pole (omezeno na 10 znaků) a uložení data do něj jako řetězce ve formátu ISO (RRRR-MM-DD) s 00 pro měsíc a den, kdy není uveden žádný měsíc a/nebo den (například datum pole v MySQL). Tímto způsobem může toto pole pracovat s libovolnými databázemi, data lze číst, chápat a upravovat přímo a jednoduše člověkem pomocí jednoduchého klienta (jako mysql klient, phpmyadmin atd.). To byl požadavek. Lze jej také exportovat do Excelu/CSV bez jakékoli konverze apod. Nevýhodou je nevynucování formátu (kromě Django). Někdo by mohl napsat 'není datum' nebo udělejte chybu ve formátu a DB to přijme (pokud máte představu o tomto problému...).

Tímto způsobem je také možné provádět všechny speciální dotazy na datum pole poměrně snadno. Pro dotazy s WHERE:<,>, <=,>=a =pracují přímo. Přímo fungují také dotazy IN a BETWEEN. Chcete-li dotazovat podle dne nebo měsíce, stačí to udělat pomocí EXTRACT (DAY|MONTH ...). Objednávání práce také přímo. Takže si myslím, že pokrývá všechny potřeby dotazů a většinou bez komplikací.

Na straně Djanga jsem udělal 2 věci. Nejprve jsem vytvořil PartialDate objekt, který vypadá většinou jako datetime.date ale podpůrné datum bez měsíce a/nebo dne. Uvnitř tohoto objektu používám objekt datetime.datetime k uchování data. Hodiny a minuty používám jako příznak, který říká, zda je měsíc a den platný, když jsou nastaveny na 1. Je to stejný nápad jako steveha navrhnout, ale s jinou implementací (a pouze na straně klienta). Pomocí datetime.datetime object mi dává spoustu pěkných funkcí pro práci s daty (validace, porovnávání atd.).

Za druhé, vytvořil jsem PartialDateField které se většinou zabývají převodem mezi PartialDate objekt a databáze.

Zatím to funguje docela dobře (většinou jsem dokončil své rozsáhlé testy jednotek).



  1. SQL Server Express vs Express localdb

  2. 2 způsoby, jak zřetězit řetězec a číslo v Oracle

  3. Jak GROUP BY DESC vybírá své pořadí?

  4. Postgres pg_dump vypíše databázi pokaždé v jiném pořadí