Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Projektowanie niepokrywających się zdarzeń data-godzina

Podczas pracy z zakresami dat i godzin bardzo często używa się zakresu obejmującego na początku i wykluczającego na końcu. Na przykład:

(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

Wartość mieści się w zakresie, gdy jest mniejsza lub równa początku i większa niż koniec (ale nie równa). W powyższym przykładzie 02:00 należy do drugiego zakresu, a nie do pierwszego. Innymi słowy:

Start <= value < End 

Lub równoważnie,

Start <= value  AND  End > value

W matematyce przy użyciu notacji interwałowej , jest to tzw. interwał półotwarty.

[Start, End)

To zawsze lepsze podejście niż pomysł użycia wartości takiej jak 01:59:59 . Zastanów się, czy mam odjąć End - Start aby uzyskać czas trwania. Spodziewałbym się, że odpowiedź będzie trwać godzinę, a nie 59 minut i 59 sekund.

Większość przykładów używa terminów Start/End , ale czasami zobaczysz Start/End lub Start/Stop . Osobiście uważam, że najlepszym zestawem terminów do użycia, gdy masz zakres inkluzywny/wyłączny, jest Start/Until . Ma tę dodatkową zaletę, że oba terminy mają 5 znaków, są ustawione alfabetycznie i wyraźnie wskazują, że data zakończenia jest wyłączna.

Ponadto, gdy mówisz o różnych wydarzeniach, powinieneś zapisywać swoje czasy jako UTC, aby uniknąć zamieszania wokół stref czasowych. Jest to ważne nawet w przypadku aplikacji lokalnych, ponieważ wiele stref czasowych przechodzi przez zmiany czasu letniego. Nie chcesz, aby wartości rejestrowane w bazie danych były niejednoznaczne. W MySQL możesz użyć TIMESTAMP typ danych, aby upewnić się, że wartości są przechowywane jako UTC, lub możesz użyć DATETIME typ danych, jeśli masz pewność, że pracujesz z wartościami UTC w kodzie aplikacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać ograniczenie sprawdzające w migracji Railsów?

  2. Jak wyświetlić kolejny numer w wyniku zapytania MySQL

  3. Jak wykonać kopię zapasową bazy danych Moodle MySQL

  4. Ogranicz SQL o sumę wartości wiersza

  5. Zdalne łączenie się z bazą danych MySQL