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

Проектиране на събития за дата и час, които не се припокриват

Много често при работа с диапазони от дата и време е да използвате диапазон, който е включващ в началото и изключителен в края. Например:

(using ISO8601 formatting)

Start                  End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z

Стойността е в диапазона, когато е по-малка или равна на началото и по-голяма от (но не равна на) края. В примера по-горе 02:00 принадлежи към втория диапазон, а не към първия. С други думи:

Start <= value < End 

Или еквивалентно,

Start <= value  AND  End > value

В математиката с помощта на Интервална нотация , това е известно като "полуотворен" интервал.

[Start, End)

Това винаги е по-добър подход от идеята за използване на стойност като 01:59:59 . Помислете дали трябва да извадя End - Start за да получите продължителност. Очаквам отговорът да бъде един час, а не 59 минути и 59 секунди.

Повечето примери използват термините Start/End , но понякога ще видите Start/End или Start/Stop . Лично аз смятам, че най-добрият набор от термини, които да използвате, когато имате включващ/изключителен диапазон е Start/Until . Той има допълнителното предимство, че двата термина са по 5 знака, подредени по азбучен ред и изрично указват, че крайната дата е изключителна.

Освен това, когато говорите за различни събития, трябва да записвате времето си като UTC, за да предотвратите объркване около часовите зони. Това дори е важно за локални приложения, тъй като много часови зони преминават през лятно часово време. Не искате стойностите, които записвате в базата данни, да са двусмислени. В MySQL можете да използвате TIMESTAMP тип данни, за да сте сигурни, че стойностите се съхраняват като UTC, или можете да използвате DATETIME тип данни, ако можете да сте сигурни, че работите с UTC стойности в кода на приложението си.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Фатална грешка:Моля, прочетете раздела за сигурност на ръководството, за да разберете как да стартирате mysqld като root

  2. Извикайте съхранена процедура за всеки ред, върнат от заявка в MySQL

  3. mysqldump - Експортирайте структура само без автоматично инкремент

  4. MySQL Изчислете процента

  5. MySQL - Как да сумираме пъти?