Sådan arbejder du effektivt med datoer og tider i MySQL

Sådan arbejder du effektivt med datoer og tider i MySQL

Datoer og tidspunkter er vigtige, de hjælper med at holde tingene organiseret og er et integreret aspekt af enhver softwarebetjening.





Effektivt arbejde med dem i databasen kan nogle gange virke forvirrende, uanset om det arbejder på tværs af de forskellige tidszoner, tilføjer / fratrækker datoer og andre operationer.





Lær de forskellige MySQL -funktioner, der er tilgængelige til let at håndtere og administrere datoer / tider i din database.





Arbejde med tidszoner

For at hjælpe med at holde tingene standardiseret bør du kun nogensinde arbejde med datoer / tidspunkter i UTC -tidszonen. Hver gang du opretter forbindelse til MySQL -databasen, skal du skifte tidszonen til UTC, hvilket kan gøres med følgende SQL -sætning:

SET TIME_ZONE = '+0:00'

Da alle datoer nu gemmes i UTC, ved du altid, hvad du arbejder med, hvilket gør tingene mere enkle og ligetil.



hvordan man streamer telefon til xbox one

Når det er nødvendigt, kan du nemt konvertere tidszonen af en hvilken som helst datetime / tidsstempelværdi med handy CONVERT_TZ () MySQL -funktion. Du skal først kende forskydningen, f.eks. Er PST på Nordamerikas vestkyst UTC -08: 00, så du kan bruge:

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

Dette resulterer i 2021-02-04 13:47:23 hvilket er helt korrekt. De tre argumenter gik videre til CONVERT_TZ () er først det datetime / tidsstempel, du starter med (brug nu () til aktuel tid), vil det andet altid være '+0: 00' da alle datoer er tvunget til UTC i databasen, og den sidste er den forskydning, vi ønsker at konvertere datoen til.





Tilføj / træk datoer

Mange gange skal du tilføje til eller trække fra datoer, f.eks. Hvis du skal hente poster fra en uge siden eller planlægge noget om en måned fra nu.

Heldigvis har MySQL det fremragende DATE_ADD () og DATE_SUB () funktioner, der gør denne opgave ekstremt let. For eksempel kan du trække to uger fra den aktuelle dato med SQL -sætningen:





SELECT DATE_SUB(now(), interval 2 week);

Hvis du i stedet ønskede at tilføje tre dage til et eksisterende tidsstempel, ville du bruge:

SELECT DATE_ADD('2021-02-07 11:52:06', interval 3 day);

Begge funktioner fungerer ens, det første argument er det tidsstempel, du starter med, og det andet argument er intervallet, der skal tilføjes eller trækkes fra. Det andet argument er altid formateret det samme startende med ordet interval efterfulgt af en numerisk værdi og selve intervallet, som kan være et af følgende: sekund, minut, time, dag, uge, måned, kvartal, år.

For et andet eksempel, hvis du ønskede at hente alle logins, der fandt sted i de sidste 34 minutter, kunne du bruge en SQL -sætning som:

SELECT * FROM logins WHERE login_date >= DATE_SUB(now(), interval 45 minute);

Som du kan se, vil dette hente alle poster fra logins tabel med en login -dato større end den aktuelle tid minus 45 minutter, eller med andre ord, de sidste 45 minutter.

Få forskel på datoer

Nogle gange skal du få at vide, hvor lang tid der er gået mellem to datoer. Du kan nemt få antallet af dage mellem to forskellige datoer med DATEDIFF funktion, såsom nedenstående SQL -sætning:

SELECT DATEDIFF(now(), '2020-12-15');

Det DATEDIFF funktion tager to argumenter, som begge er dato / tidsstempler og angiver antallet af dage mellem dem. Ovenstående eksempel viser antallet af dage, der er gået fra den 15. december 2020 til i dag.

For at få antallet af sekunder mellem to datoer, skal TO_SECONDS () funktion kan være praktisk, for eksempel:

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

Dette vil resultere i antallet af sekunder mellem de to angivne datoer.

Uddrag segmenter fra datoer

Der er forskellige MySQL -funktioner, der giver dig mulighed for nemt at udtrække bestemte segmenter fra datoer, f.eks. Hvis du kun ønskede måneden, årets dag eller timen. Her er et par eksempler på sådanne funktioner:

SELECT MONTH('2021-02-11 15:27:52'); SELECT HOUR(now()); SELECT DAYOFYEAR('2021-07-15 12:00:00');

Ovenstående SQL -sætninger ville resultere i 02 , den aktuelle time og 196 da 15. september er årets 196. dag. Her er en liste over alle tilgængelige datoekstraktionsfunktioner, der hver kun tager et argument, og datoen udtrækkes fra:

- SECOND()
- MINUTE()
- HOUR()
- DAY()
- WEEK() - Number 0 - 52 defining the week within the year.
- MONTH()
- QUARTER() - Number 1 - 4 defining the quarter of the year.
- YEAR()
- DAYOFYEAR() - The day of the year (eg. Sept 15th = 196).
- LAST_DAY() - The last day in the given month.
- DATE() - The date in YYYY-MM-DD format without the time.
- TIME() The time in HH:II:SS format without the date.
- TO_DAYS() - The number of days since A.D. 0.
- TO_SECONDS() - The number of seconds since A.D. 0.
- UNIX_TIMESTAMP() - The number of seconds since the epoch (Jan 1st, 1970)

For eksempel, hvis du måske kun ville hente måneden og året, som alle brugere blev oprettet, kan du bruge en SQL -sætning som f.eks .:

SELECT id, MONTH(created_at), YEAR(created_at) FROM users;

Dette ville hente alle poster i brugere tabel og vis id#, måned og år, hver bruger blev oprettet i.

Gruppering af optegnelser efter datoperiode

En glimrende brug af datofunktioner er muligheden for at gruppere poster efter datoperiode ved hjælp af GRUPPE AF i dine SQL -sætninger. For eksempel vil du måske trække det samlede beløb for alle ordrer i 2020 grupperet efter måned. Du kan bruge en SQL -sætning som f.eks .:

SELECT MONTH(created_at), SUM(amount) FROM orders WHERE created_at BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59' GROUP BY MONTH(created_at);

Dette ville hente alle ordrer, der blev placeret i år 2020, gruppere dem efter den måned, de blev oprettet, og returnere 12 poster, der viser det samlede beløb, der er bestilt hver måned i året.

Bemærk, for bedre indeksydelse er det altid bedst at undgå at bruge datofunktioner som f.eks ÅR() inden for WHERE -klausulen i SQL -sætninger, og brug i stedet MELLEM operatør som vist i ovenstående eksempel.

Bliv aldrig forvirret med datoer igen

Ved hjælp af ovenstående viden kan du nu effektivt arbejde med, oversætte og udføre operationer på datoer og tidspunkter i en lang række anvendelsessager.

Husk altid at bruge UTC, når du arbejder med datoer for enkelheds skyld, og brug ovenstående tip til effektivt at styre datoer i din software, uanset om det er at gennemføre enkle beregninger eller let trække rapporter grupperet efter datoperioder.

Hvis du er noget ny i SQL, skal du tjekke disse vigtige SQL -kommandoer for at hjælpe med at forbedre din SQL -brug.

Del Del Tweet E -mail Sådan oprettes professionelle rapporter og dokumenter i Microsoft Word

Denne vejledning undersøger elementerne i en professionel rapport og gennemgår strukturering, styling og afslutning af dit dokument i Microsoft Word.

Læs Næste
Relaterede emner Om forfatteren Matt Dizak(18 artikler udgivet) Mere fra Matt Dizak

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere