sql >> Database >  >> RDS >> Mysql

Niet-overlappende datum-tijd-gebeurtenissen ontwerpen

Bij het werken met datum-tijdbereiken is het heel gebruikelijk dat je een bereik gebruikt dat aan het begin inclusief is en aan het einde exclusief. Bijvoorbeeld:

(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

Een waarde is binnen bereik als deze kleiner is dan of gelijk is aan het begin en groter dan (maar niet gelijk aan) het einde. In het bovenstaande voorbeeld 02:00 behoort tot de tweede reeks, niet de eerste. Met andere woorden:

Start <= value < End 

Of gelijkwaardig,

Start <= value  AND  End > value

In wiskunde, met behulp van Intervalnotatie , dit staat bekend als een "half-open" interval.

[Start, End)

Dit is altijd een betere benadering dan het idee om een ​​waarde te gebruiken zoals 01:59:59 . Overweeg of ik End - Start . zou aftrekken een looptijd te krijgen. Ik zou verwachten dat het antwoord één uur is, niet 59 minuten en 59 seconden.

De meeste voorbeelden gebruiken de termen Start/End , maar soms zie je Begin/End of Start/Stop . Persoonlijk denk ik dat de beste set termen die je kunt gebruiken als je een inclusief/exclusief bereik hebt, Start/Until is. . Het heeft het extra voordeel dat beide termen uit 5 tekens bestaan, alfabetisch op een rij staan ​​en expliciet aangeven dat de einddatum exclusief is.

Als u het over afzonderlijke gebeurtenissen heeft, moet u ook uw tijden als UTC vastleggen om verwarring rond tijdzones te voorkomen. Dit is zelfs belangrijk voor lokale toepassingen, aangezien veel tijdzones door zomertijdovergangen gaan. U wilt niet dat de waarden die u in de database vastlegt, dubbelzinnig zijn. In MySQL kunt u de TIMESTAMP . gebruiken gegevenstype om ervoor te zorgen dat waarden worden opgeslagen als UTC, of ​​u kunt de DATETIME . gebruiken gegevenstype als u zeker weet dat u met UTC-waarden in uw toepassingscode werkt.




  1. Verbinding maken met Vertica in IRI Workbench

  2. SQL UNION-clausule voor beginners

  3. Fout bij invoegen in sql-database met php

  4. Hoe de BINARY-operator werkt in MariaDB