Håndtering dato og klokkeslæt data i MySQL er afgørende for mange databaseoperationer, især når det kommer til at håndtere tidsstempler, der planlægger opgaver eller genererer tidsbaseret. MySQL tilbyder en række dato- og tidsfunktioner, der hjælper brugere med at arbejde med datoværdier med at udføre beregninger og formatere dem efter behov.
Disse funktioner gør det muligt for udviklere at udføre beregninger at udtrække bestemte dele af en dato eller endda formatere output for bedre læsbarhed. I denne artikel vil vi udforske de mest brugte MySQL-datofunktioner, der forklarer deres syntaks, giver eksempler og guider dig gennem, hvordan du effektivt bruger dem
Forståelse af MySQL-dato- og tidsdatatyper
Når du arbejder med datoer i MySQL, kan det være vanskeligt for begyndere, især fordi formatet på datoen i databasen skal matche formatet på inputdata under indsættelse. I mange tilfælde, i stedet for blot at bruge en simpel dato, kan vi være nødt til at gemme både en dato og et klokkeslæt afhængigt af brugssituationen. Det er her DATETIME og TIMESTAMP datatyper kommer i spil.
MySQL giver følgende datatyper til lagring af dato- og tidsværdier:
1. DATO :
- Format :
YYYY-MM-DD - Bruges til kun at gemme datoen (år måned og dag) uden nogen tidskomponent.
2. DATOTIME :
- Format :
YYYY-MM-DD HH:MM:SS - Gemmer både datoen og klokkeslættet, hvilket gør det nyttigt, når du skal fange bestemte tidspunkter sammen med datoen.
3. TIDSSTIMPEL :
- Format :
YYYY-MM-DD HH:MM:SS - Svarende til
DATETIMEmenTIMESTAMPinkluderer også tidszoneunderstøttelse. Den opdaterer automatisk til det aktuelle tidsstempel, når en post ændres, hvilket gør den ideel til at spore ændringer af poster over tid.
4. ÅR :
- Format :
YYYYellerYY - Bruges til kun at gemme året, hvilket kan være nyttigt til applikationer, hvor kun året er nødvendigt, såsom at spore fødselsår eller regnskabsår.
MySQL dato og klokkeslæt funktioner
Lad os nu dykke ned i MySQL-datofunktionerne, som du kan bruge til at manipulere og forespørge om dato- og tidsdata effektivt.
1. NU()- Få aktuel dato og klokkeslæt
De NU() funktion henter den aktuelle dato og klokkeslæt ind ÅÅÅÅ-MM-DD TT:MI:SS format.
Forespørgsel:
SELECT NOW();
Produktion:

2. CURDATE() - Hent kun aktuel dato
Hvis vi kun har brug for den aktuelle dato uden den tidsdel, vi kan bruge CURDATE() som returnerer datoen ind YYYY-MM-DD format.
Forespørgsel:
SELECT CURDATE();
Produktion:

3. CURTIME() - Få kun aktuel tid
Funktionen CURTIME() returnerer den aktuelle tid i HH:MI:SS format ekskl. dato.
Forespørgsel:
SELECT CURTIME();
Produktion:

4. DATE() - Uddrag datodelen fra en DATETIME-værdi
DeDATE()funktion udtrækker kun datodelen fra enDATETIMEellerTIMESTAMPværdi kasserer tiden.
Eksempel: For et bord kaldet users :
| Id | Navn | Fødselstid |
|---|---|---|
| 4120 | Praksis | 1996-09-26 16:44:15.581 |
Forespørgsel:
SELECT Name DATE(BirthTime)
AS BirthDate FROM Test;
Produktion:
| Navn | Fødselsdato |
|---|---|
| Praksis | 1996-09-26 |
5. EXTRACT() - Udtræk specifikke datodele
EXTRACT()bruges til at udtrække bestemte dele af en dato, såsom dag måned eller år. Denne funktion kan være særlig nyttig, når du analyserer eller sammenligner forskellige dele af en date. Flere enheder kan komme i betragtning men kun nogle bruges som f.eks MIKROSEKUND ANDET MINUT TIME DAG UGE MÅNED KVARTAL ÅR osv. Og 'dato' er et gyldigt datoudtryk.
.tostring java
Syntaks:
UDDRAG(enhed FRA dato);
Forespørgsel til at udtrække dag:
SELECT Name Extract(DAY FROM
BirthTime) AS BirthDay FROM Test;
Produktion:
| Navn | Fødselsdag |
|---|---|
| Praksis | 26 |
Forespørgsel til at udtrække år:
SELECT Name Extract(YEAR FROM BirthTime)
AS BirthYear FROM Test;
Produktion:
| Navn | Fødselsår |
|---|---|
| Praksis | 1996 |
Forespørgsel for at udtrække sekunder:
SELECT Name Extract(SECOND FROM
BirthTime) AS BirthSecond FROM Test;
Produktion:
| Navn | BirthSecond |
|---|---|
| Praksis | 581 |
6. DATE_ADD() - Tilføj intervaller til en dato
De DATE_ADD() funktionen giver dig mulighed for at tilføje tidsintervaller (f.eks. dage måneder år) til en dato ellerDATETIMEværdi.
Syntaks:
DATE_ADD(dato INTERVAL udtr type);
Eksempel: For nedenstående tabel med navnet ' Prøve '
| Id | Navn | Fødselstid |
|---|---|---|
| 4120 | Praksis | 1996-09-26 16:44:15.581 |
Forespørgsel til Tilføj 1 år til en dato
SELECT Name DATE_ADD(BirthTime INTERVAL
1 YEAR) AS BirthTimeModified FROM Test;
Produktion:
| Navn | Fødselstidspunkt Ændret |
|---|---|
| Praksis | 1997-09-26 16:44:15.581 |
Forespørgsel om at tilføje 30 dage til en dato
SELECT Name DATE_ADD(BirthTime
INTERVAL 30 DAY) AS BirthDayModified FROM Test;
Produktion:
| Navn | Fødselsdag Modificeret |
|---|---|
| Praksis | 1996-10-26 16:44:15.581 |
Forespørgsel om at tilføje 4 timer til en dato
SELECT Name DATE_ADD(BirthTime INTERVAL
4 HOUR) AS BirthHourModified FROM Test;
Produktion:
| Navn | BirthSecond |
|---|---|
| Praksis | 1996-10-26 20:44:15.581 |
7. DATEDIFF() - Find forskellen mellem to datoer
Denne funktion returnerer antallet af dage mellem to datoer.
Syntaks:
DATODIFF(intervaldate1 dato2);
interval - minut/time/måned/år osv
dato1 & dato2- dato/tid udtryk
Forespørgsel til Find forskellen mellem to datoer
SELECT DATEDIFF(day '2017-01-13' '2017-01-03') AS DateDiff;
Produktion:
| DatoDiff |
|---|
8. DATE_FORMAT() - Formater dato og klokkeslæt
DATE_FORMAT() giver os mulighed for at formatere en DATO DATOTIME eller TIDSSTIMPEL værdi i et brugerdefineret format ved hjælp af pladsholdere.
Syntaks:
DATE_FORMAT(datoformat);
datoen er en gyldig dato, og formatet angiver outputformatet for datoen/klokkeslættet. De formater der kan bruges er:
- %a-Forkortet ugedagsnavn (søn-lør)
- %b-Forkortet månedsnavn (jan-dec)
- %c-måned numerisk (0-12)
- %D-dag i måneden med engelsk suffiks (0. 1. 2. 3.)
- %d-dag i måneden numerisk (00-31)
- %e-dag i måneden numerisk (0-31)
- %f-mikrosekunder (000000-999999)
- %H-time (00-23)
- %h-time (01-12)
- %I-time (01-12)
- %i-minutter numerisk (00-59)
- %j-dag i året (001-366)
- %k-time (0-23)
- %l-time (1-12)
- %M-måneds navn (januar-december)
- %m-måned numerisk (00-12)
- %p-AM eller PM
- %r-tid 12 timer (tt:mm: ss efterfulgt af AM eller PM)
- %S-sekunder (00-59)
- %s-sekunder (00-59)
- %T-tid 24-timer (tt:mm: ss)
- %U-Uge (00-53), hvor søndag er den første dag i ugen
- %u-Uge (00-53), hvor mandag er den første dag i ugen
- %V-Uge (01-53), hvor søndag er den første dag i ugen brugt med %X
- %v-Uge (01-53), hvor mandag er den første dag i ugen brugt med %x
- %W-Ugedag navn (søndag-lørdag)
- %w-ugedag (0=søndag 6=lørdag)
- %X-år for ugen, hvor søndag er den første dag i ugen fire cifre brugt med %V
- %x-År for ugen, hvor mandag er den første dag i ugen, fire cifre brugt med %v
- %Y-Year numeriske fire cifre
- %y-Year numeriske to cifre
Forespørgsel om at formatere en dato
SELECT DATE_FORMAT('2025-04-10 12:34:56' '%W %M %d %Y') AS formatted_date;Produktion:
| Formateret_dato |
|---|
| Torsdag den 10. april 2025 |
Bedste praksis for at arbejde med dato og tid i MySQL
1. Brug altid korrekte datoformater
Når du indsætter eller opdaterer datoer, skal du sørge for, at du følger MySQL's forventede formater (YYYY-MM-DD YYYY-MM-DD HH:MI:SS). Dette sikrer, at dine forespørgsler returnerer forventede resultater uden fejl.
2. Tidszoneovervejelser med TIMESTAMP
MensDATETIMEgemmer ikke tidszoneoplysningerTIMESTAMPgør. Hvis din applikation er tidszonefølsom (for eksempel i internationale applikationer), så overvej at brugeTIMESTAMPfor dato-tidsfelter, der skal tage højde for forskellige tidszoner.
3. Håndtering af datointervaller i forespørgsler
For at filtrere data baseret på datointervaller (f.eks. hentning af alle poster fra en bestemt måned eller et bestemt år), skal du sørge for at bruge korrekte datosammenligninger iWHEREklausul. Eksempel:
SELECT * FROM orders
WHERE order_date BETWEEN '2025-01-01' AND '2025-01-31';
4. Ydelsesovervejelser
Når du arbejder med dato- og tidsfunktioner, især i store datasæt, skal du være opmærksom på indvirkningen på ydeevnen. Undgå at bruge funktioner som f.eksNOW()ellerCURDATE()iWHEREklausul, da de kan bremse forespørgsler, når de håndterer store tabeller.
Konklusion
MySQL's dato og klokkeslæt funktioner er væsentlige værktøjer til håndtering og manipulere tidsmæssige data i dine databaser. Ved at mestre funktioner somNOW() CURDATE() DATE_ADD() DATEDIFF()ogDATE_FORMAT()du nemt kan arbejde med tidsbaserede beregninger sammenligninger og formater . Nøglen til effektivt at bruge disse funktioner er at forstå deres syntaks, hvornår og hvordan man bruger dem og deres præstationsimplikationer i store datasæt. Med denne viden vil du være i stand til at bygge mere effektive præcise og skalerbare forespørgsler til alle dine dato- og tidsrelaterede behov i MySQL.