Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да се справим с частични дати (2010-00-00) от MySQL в Django?

Първо, благодаря за всичките ви отговори. Нито един от тях, както е, не беше добро решение за моя проблем, но, за ваша защита, трябва да добавя, че не съм дал всички изисквания. Но всеки от тях ми помага да мисля за проблема си и някои от вашите идеи са част от окончателното ми решение.

Така че моето окончателно решение, от страна на DB, е да използвам varchar поле (ограничено до 10 знака) и съхраняване на датата в него, като низ, във формат ISO (ГГГГ-ММ-ДД) с 00 за месец и ден, когато няма месец и/или ден (като дата поле в MySQL). По този начин това поле може да работи с всякакви бази данни, данните могат да се четат, разбират и редактират директно и лесно от човек, използващ обикновен клиент (като mysql клиент, phpmyadmin и т.н.). Това беше изискване. Може също да се експортира в Excel/CSV без преобразуване и т.н. Недостатъкът е, че форматът не се прилага (освен в Django). Някой може да напише „не е среща“ или направете грешка във формата и БД ще я приеме (ако имате представа за този проблем...).

По този начин също така е възможно да направите всички специални заявки за дата поле сравнително лесно. За заявки с WHERE:<,>, <=,>=и =работят директно. Заявките IN и BETWEEN също работят директно. За заявка по ден или месец просто трябва да го направите с EXTRACT (ДЕН | МЕСЕЦ ...). Поръчване на работа също директно. Така че мисля, че покрива всички нужди от заявки и почти без усложнения.

От страна на Django направих 2 неща. Първо, създадох PartialDate обект, който изглежда най-вече като datetime.date но поддържаща дата без месец и/или ден. Вътре в този обект използвам обект datetime.datetime, за да запазя датата. Използвам часовете и минутите като флаг, който показва дали месецът и денят са валидни, когато са зададени на 1. Същата идея е, че steveha предложи, но с различна реализация (и само от страна на клиента). Използване на datetime.datetime обектът ми дава много хубави функции за работа с дати (проверка, сравнение и т.н.).

Второ, създадох PartialDateField които се занимават предимно с преобразуването между PartialDate обект и базата данни.

Засега работи доста добре (завърших най-вече моите обширни тестове).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. получаване на брой от същата колона в таблица на mysql?

  2. предайте javascript променлива към заявката за избор на php mysql

  3. Импортирайте шестнадесетични/двоични данни в mysql

  4. Таблица за вътрешно свързване по отношение на максимална стойност

  5. Как да поправите MySQL база данни в cPanel