sql >> Databasteknik >  >> RDS >> Mysql

Designa icke-överlappande datum-tid-händelser

Det är mycket vanligt när man arbetar med datum- och tidsintervall att man använder ett intervall som är inklusive i början och exklusivt i slutet. Till exempel:

(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

Ett värde är inom intervallet när det är mindre än eller lika med början och större än (men inte lika med) slutet. I exemplet ovan, 02:00 tillhör det andra intervallet, inte det första. Med andra ord:

Start <= value < End 

Eller motsvarande,

Start <= value  AND  End > value

I matematik använder du Intervallnotation , detta är känt som ett "halvöppet" intervall.

[Start, End)

Detta är alltid ett bättre tillvägagångssätt än idén att använda ett värde som 01:59:59 . Fundera på om jag skulle subtrahera End - Start för att få en varaktighet. Jag förväntar mig att svaret är en timme, inte 59 minuter och 59 sekunder.

De flesta exempel använder termerna Start/End , men ibland ser du Begin/End eller Start/Stop . Personligen tror jag att den bästa uppsättningen termer att använda när du har ett inkluderande/exklusivt intervall är Start/Until . Det har den extra fördelen att båda termerna är 5 tecken, ordnade alfabetiskt och uttryckligen förmedlar att slutdatumet är exklusivt.

Dessutom, när du pratar om distinkta händelser, bör du registrera dina tider som UTC för att förhindra förvirring kring tidszoner. Detta är till och med viktigt för lokala applikationer, eftersom många tidszoner går igenom sommartidsövergångar. Du vill inte att värdena du registrerar i databasen ska vara tvetydiga. I MySQL kan du använda TIMESTAMP datatyp för att säkerställa att värden lagras som UTC, eller så kan du använda DATETIME datatyp om du kan vara säker på att du arbetar med UTC-värden i din applikationskod.




  1. Hur justify_interval() fungerar i PostgreSQL

  2. Hur man tar bort objekt från SQLite-databasen med SQLiteOpenHelper-klassen

  3. Ett nytt sätt att anpassa din PostgreSQL-övervakning med Prometheus

  4. SQL/Doctrine-fråga för att hitta data med flera villkor med många till många-associationer