sql >> Database teknologi >  >> RDS >> Mysql

Design af ikke-overlappende dato-tidsbegivenheder

Det er meget almindeligt, når man arbejder med dato- og tidsintervaller, at man bruger et interval, der er inkluderende i starten og eksklusivt i slutningen. For eksempel:

(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

En værdi er inden for området, når den er mindre end eller lig med starten og større end (men ikke lig med) slutningen. I eksemplet ovenfor, 02:00 tilhører det andet område, ikke det første. Med andre ord:

Start <= value < End 

Eller tilsvarende,

Start <= value  AND  End > value

I matematik skal du bruge Intervalnotation , dette er kendt som et "halvt åbent" interval.

[Start, End)

Dette er altid en bedre tilgang end ideen om at bruge en værdi som 01:59:59 . Overvej, om jeg skulle trække End - Start fra for at få en varighed. Jeg forventer, at svaret er en time, ikke 59 minutter og 59 sekunder.

De fleste eksempler bruger termerne Start/End , men nogle gange vil du se Begin/End eller Start/Stop . Personligt tror jeg, at det bedste sæt termer at bruge, når du har et inkluderende/eksklusivt interval, er Start/Until . Det har den ekstra fordel, at begge termer er på 5 tegn, alfabetisk opstillet og udtrykkeligt angiver, at slutdatoen er eksklusiv.

Når du taler om forskellige hændelser, bør du også registrere dine tider som UTC for at forhindre forvirring omkring tidszoner. Dette er endda vigtigt for lokale applikationer, da mange tidszoner gennemgår sommertid overgange. Du ønsker ikke, at de værdier, du registrerer i databasen, skal være tvetydige. I MySQL kan du bruge TIMESTAMP datatype for at sikre, at værdier er gemt som UTC, eller du kan bruge DATETIME datatype, hvis du kan være sikker på, at du arbejder med UTC-værdier i din applikationskode.




  1. Hvordan forbinder man Android Studio med SQL Server-databasen?

  2. SQL Server Ubrugt Index

  3. SELECT-forespørgsel returnerer 1 række fra hver gruppe

  4. MySql forespørgselsanalysator - gratis løsninger