Datums en tijden zijn belangrijk, ze helpen dingen georganiseerd te houden en vormen een integraal aspect van elke softwarebewerking.

Efficiënt met hen werken binnen de database kan soms verwarrend lijken, of het nu gaat om het werken in de verschillende tijdzones, het optellen / aftrekken van datums en andere bewerkingen.

Leer de verschillende MySQL-functies die beschikbaar zijn om gemakkelijk datums / tijden in uw database te verwerken en te beheren.

Werken met tijdzones

Om de zaken gestandaardiseerd te houden, mag u alleen werken met datums / tijden in de UTC-tijdzone. Elke keer dat u een verbinding tot stand brengt met de MySQL-database, moet u de tijdzone naar UTC schakelen, wat u kunt doen met de volgende SQL-instructie:

SET TIME_ZONE = '+0: 00'

Omdat alle datums nu in UTC worden opgeslagen, weet u altijd waar u mee werkt, waardoor de zaken eenvoudiger en ongecompliceerder worden.

Indien nodig kunt u gemakkelijk converteer de tijdzone van elke datetime / timestamp-waarde met de handige

instagram viewer
CONVERT_TZ () MySQL-functie. U moet eerst de offset weten, bijvoorbeeld PST aan de westkust van Noord-Amerika is UTC -08: 00, dus u kunt het volgende gebruiken:

PolyTime is de beste tijdzoneconversie-app voor meerdere steden tegelijk

PolyTime, een nieuwe app van MakeUseOf, maakt het gemakkelijk om tijdzones over de hele wereld te vergelijken. Hier is wat u ermee kunt doen en hoe het werkt.

SELECTEER CONVERT_TZ ('2021-02-04 21:47:23', '+0: 00', '-8: 00');

Dit resulteert in 2021-02-04 13:47:23 wat precies correct is. De drie argumenten gingen over op CONVERT_TZ () zijn eerst de datetime / timestamp waarmee u begint (gebruik nu () voor de huidige tijd), de tweede zal dat altijd zijn '+0:00' aangezien alle datums in de database naar UTC worden gedwongen, en de laatste de offset is waarnaar we de datum willen converteren.

Datums optellen / aftrekken

Vaak moet u datums optellen of aftrekken, bijvoorbeeld als u records van een week geleden moet ophalen, of iets plannen over een maand.

Gelukkig heeft MySQL het uitstekende DATUM_ADD () en DATUM_SUB () functies die deze taak uiterst eenvoudig maken. U kunt bijvoorbeeld twee weken aftrekken van de huidige datum met de SQL-instructie:

SELECTEER DATE_SUB (nu (), interval 2 weken);

Als u in plaats daarvan drie dagen aan een bestaande tijdstempel wilt toevoegen, gebruikt u:

SELECTEER DATUM_ADD ('2021-02-07 11:52:06', interval 3 dagen);

Beide functies werken hetzelfde, het eerste argument is de tijdstempel waarmee u begint en het tweede argument is het interval dat moet worden opgeteld of afgetrokken. Het tweede argument heeft altijd dezelfde opmaak, beginnend met het woord interval gevolgd door een numerieke waarde en het interval zelf, dat een van de volgende kan zijn: seconde, minuut, uur, dag, week, maand, kwartaal, jaar.

Als u bijvoorbeeld alle aanmeldingen wilt ophalen die in de afgelopen 34 minuten hebben plaatsgevonden, kunt u een SQL-instructie gebruiken zoals:

SELECTEER * UIT logins WAAR login_date> = DATE_SUB (nu (), interval 45 minuten);

Zoals u kunt zien, worden hiermee alle records opgehaald uit de logins tafel met een inlogdatum groter dan de huidige tijd minus 45 minuten, of met andere woorden, de afgelopen 45 minuten.

Krijg verschil tussen datums

Soms moet u weten hoeveel tijd er is verstreken tussen twee datums. U kunt eenvoudig het aantal dagen tussen twee verschillende datums krijgen met de DATEDIFF functie, zoals de onderstaande SQL-instructie:

SELECTEER DATEDIFF (nu (), '2020-12-15');

De DATEDIFF De functie heeft twee argumenten, die beide datum- / tijdstempels zijn, en geeft het aantal dagen ertussen aan. Het bovenstaande voorbeeld toont het aantal dagen dat is verstreken vanaf 15 december 2020 tot vandaag.

Om het aantal seconden tussen twee datums te krijgen, de TO_SECONDS () functie kan van pas komen, bijvoorbeeld:

SELECT TO_SECONDS (nu ()) - TO_SECONDS ('2021-02-05 11:56:41');

Dit resulteert in het aantal seconden tussen de twee opgegeven datums.

Extraheer segmenten uit datums

Er zijn verschillende MySQL-functies waarmee u eenvoudig specifieke segmenten uit datums kunt extraheren, bijvoorbeeld als u alleen de maand, de dag van het jaar of het uur wilt. Hier zijn een paar voorbeelden van dergelijke functies:

KIES MAAND ('2021-02-11 15:27:52');
KIES UUR (nu ());
SELECTEER DAYOFYEAR ('2021-07-15 12:00:00');

De bovenstaande SQL-instructies zouden resulteren in 02, het huidige uur, en 196 aangezien 15 september de 196e dag van het jaar is. Hier is een lijst met alle beschikbare datumextractiefuncties, elk met slechts één argument, waarvan de datum wordt geëxtraheerd uit:

- TWEEDE()
- MINUUT ()
- UUR ()
- DAG()
- WEEK () - Nummer 0 - 52 dat de week binnen het jaar definieert.
- MAAND ()
- QUARTER () - Nummer 1 - 4 die het kwartaal van het jaar aangeeft.
- JAAR ()
- DAYOFYEAR () - De dag van het jaar (bijv. 15 sept = 196).
- LAST_DAY () - De laatste dag van de opgegeven maand.
- DATUM () - De datum in JJJJ-MM-DD-indeling zonder de tijd.
- TIME () De tijd in HH: II: SS-formaat zonder de datum.
- TO_DAYS () - Het aantal dagen sinds 0 A.D.
- TO_SECONDS () - Het aantal seconden sinds 0 A.D.
- UNIX_TIMESTAMP () - Het aantal seconden sinds het tijdperk (1 januari 1970)

Als u bijvoorbeeld alleen de maand en het jaar wilt ophalen waarin alle gebruikers zijn gemaakt, kunt u een SQL-instructie gebruiken zoals:

SELECTEER id, MONTH (created_at), YEAR (created_at) VAN gebruikers;

Dit zou alle records binnen het gebruikers tabel en toon het id #, de maand en het jaar waarin elke gebruiker is gemaakt.

Records groeperen op datumperiode

Een uitstekend gebruik van datumfuncties is de mogelijkheid om records te groeperen op datum met behulp van GROEP OP binnen uw SQL-instructies. Misschien wilt u bijvoorbeeld het totale bedrag van alle bestellingen in 2020 gegroepeerd per maand ophalen. U kunt een SQL-instructie gebruiken zoals:

SELECTEER MAAND (created_at), SUM (bedrag) VAN bestellingen WAAR created_at TUSSEN '2020-01-01 00:00:00' EN '2020-12-31 23:59:59' GROEP PER MAAND (created_at);

Hiermee worden alle bestellingen opgehaald die in het jaar 2020 zijn geplaatst, worden ze gegroepeerd op de maand waarin ze zijn gemaakt en worden 12 records geretourneerd met het totale bestelde bedrag elke maand van het jaar.

Let op: voor betere indexprestaties is het altijd het beste om datumfuncties zoals JAAR() binnen de WHERE-clausule van SQL-instructies en gebruik in plaats daarvan de TUSSEN operator zoals getoond in het bovenstaande voorbeeld.

Nooit meer met datums worden verward

Met behulp van de bovenstaande kennis kunt u nu efficiënt werken met, vertalen en bewerkingen uitvoeren in datums en tijden in een breed scala aan gebruiksscenario's.

Denk eraan om altijd UTC te gebruiken bij het werken met datums voor de eenvoud, en gebruik de bovenstaande tips om efficiënt te beheren datums in uw software, of het nu is om eenvoudige berekeningen uit te voeren of om eenvoudig op datum gegroepeerde rapporten op te halen periodes.

Als u een beetje nieuw bent bij SQL, moet u deze eens bekijken essentiële SQL-opdrachten om uw SQL-gebruik te helpen verbeteren.

E-mail
Professionele rapporten en documenten maken in Microsoft Word

Deze gids onderzoekt de elementen van een professioneel rapport en beoordeelt de structurering, vormgeving en afronding van uw document in Microsoft Word.

Gerelateerde onderwerpen
  • Niet gespecificeerd
Over de auteur
Matt Dizak (16 Artikelen gepubliceerd)Meer van Matt Dizak

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Nog een stap…!

Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.

.