Zacházení datum a čas data v MySQL jsou nezbytná pro mnoho databázových operací, zejména pokud jde o zpracování časových razítek, plánování úloh nebo generování na základě času. MySQL poskytuje řadu funkcí data a času, které uživatelům pomáhají pracovat s hodnotami data, provádět výpočty a formátovat je podle potřeby.
Tyto funkce umožňují vývojářům provádět výpočty extrahovat konkrétní části data nebo dokonce formátovat výstup pro lepší čitelnost. V tomto článku prozkoumáme nejběžněji používané funkce data MySQL, vysvětlíme jejich syntaxi, poskytneme příklady a provedeme vás, jak je efektivně používat.
Porozumění datovým typům data a času MySQL
Při práci s daty v MySQL to může být pro začátečníky složité zejména proto, že formát data v databázi musí odpovídat formátu vstupních dat při vkládání. V mnoha případech místo pouhého použití jednoduchého data možná budeme muset uložit jak datum, tak čas v závislosti na případu použití. Toto je místo DATETIME a TIMESTAMP do hry vstupují datové typy.
MySQL poskytuje následující datové typy pro ukládání hodnot data a času:
1. DATUM :
- Formát :
YYYY-MM-DD - Slouží k uložení pouze data (rok měsíc a den) bez časové složky.
2. DATETIME :
- Formát :
YYYY-MM-DD HH:MM:SS - Ukládá datum i čas, což je užitečné, když potřebujete zachytit konkrétní časy spolu s datem.
3. ČASOVÉ RAZÍTKO :
- Formát :
YYYY-MM-DD HH:MM:SS - Podobné jako
DATETIMEaleTIMESTAMPzahrnuje také podporu časového pásma. Automaticky se aktualizuje na aktuální časové razítko, když je záznam upraven, takže je ideální pro sledování změn záznamů v průběhu času.
4. ROK :
- Formát :
YYYYneboYY - Používá se pro uložení pouze roku, což může být užitečné pro aplikace, kde je potřeba pouze rok, jako je sledování roků narození nebo fiskálních let.
Funkce data a času MySQL
Nyní se pojďme ponořit do funkcí data MySQL, které můžete použít k efektivní manipulaci a dotazování na data a času.
1. NYNÍ()- Získat aktuální datum a čas
The TEĎ() funkce načte aktuální datum a čas YYYY-MM-DD HH:MI:SS formát.
Dotaz:
SELECT NOW();
výstup:

2. CURDATE() – získat pouze aktuální datum
Pokud potřebujeme pouze aktuální datum bez časové části, kterou můžeme použít CURDATE() který vrátí datum v YYYY-MM-DD formát.
Dotaz:
SELECT CURDATE();
výstup:

3. CURTIME() – získat pouze aktuální čas
Funkce CURTIME() vrací aktuální čas v HH:MI:SS formát bez data.
Dotaz:
SELECT CURTIME();
výstup:
java indexof

4. DATE() - Extrahuje část data z hodnoty DATETIME
TheDATE()funkce extrahuje pouze část data z aDATETIMEneboTIMESTAMPhodnotu zahodit čas.
Příklad: Pro stůl tzv users :
| Id | Jméno | Čas narození |
|---|---|---|
| 4120 | Praxe | 1996-09-26 16:44:15.581 |
Dotaz:
SELECT Name DATE(BirthTime)
AS BirthDate FROM Test;
výstup:
| Jméno | Datum narození |
|---|---|
| Praxe | 1996-09-26 |
5. EXTRACT() – Extrahovat části specifického data
EXTRACT()se používá k extrahování určitých částí data, jako je den, měsíc nebo rok. Tato funkce může být zvláště užitečná při analýze nebo porovnávání různých částí data. Lze uvažovat o několika jednotkách, ale pouze některé se používají jako např MIKROKRUHÁ DRUHÁ MINUTA HODINA DEN TÝDEN MĚSÍC ČTVRTLETNÍ ROK atd. A 'date' je platný výraz data.
Syntax:
EXTRACT(jednotka OD datum);
Den dotazu na extrahování:
životní cyklus sdlc
SELECT Name Extract(DAY FROM
BirthTime) AS BirthDay FROM Test;
výstup:
| Jméno | Narozeniny |
|---|---|
| Praxe | 26 |
Rok pro extrakci dotazu:
SELECT Name Extract(YEAR FROM BirthTime)
AS BirthYear FROM Test;
výstup:
| Jméno | Rok narození |
|---|---|
| Praxe | 1996 |
Dotaz na extrahování sekund:
SELECT Name Extract(SECOND FROM
BirthTime) AS BirthSecond FROM Test;
výstup:
| Jméno | Druhé narození |
|---|---|
| Praxe | 581 |
6. DATE_ADD() – Přidání intervalů k datu
The DATE_ADD() Funkce umožňuje přidat časové intervaly (např. dny měsíce roky) k datu neboDATETIMEhodnota.
Syntax:
DATE_ADD(datum INTERVAL typ expr);
Příklad: Pro níže uvedenou tabulku s názvem ' Test '
| Id | Jméno | Čas narození |
|---|---|---|
| 4120 | Praxe | 1996-09-26 16:44:15.581 |
Dotaz na Přidejte 1 rok k datu
SELECT Name DATE_ADD(BirthTime INTERVAL
1 YEAR) AS BirthTimeModified FROM Test;
výstup:
| Jméno | BirthTimeModified |
|---|---|
| Praxe | 1997-09-26 16:44:15.581 |
Dotaz na přidání 30 dnů k datu
SELECT Name DATE_ADD(BirthTime
INTERVAL 30 DAY) AS BirthDayModified FROM Test;
výstup:
| Jméno | BirthDayModified |
|---|---|
| Praxe | 1996-10-26 16:44:15.581 |
Dotaz na přidání 4 hodin k datu
SELECT Name DATE_ADD(BirthTime INTERVAL
4 HOUR) AS BirthHourModified FROM Test;
výstup:
| Jméno | Druhé narození |
|---|---|
| Praxe | 1996-10-26 20:44:15.581 |
7. DATEDIFF() - Najděte rozdíl mezi dvěma daty
Tato funkce vrací počet dní mezi dvěma daty.
Syntax:
DATEDIFF(intervaldatum1 datum2);
interval - minuta/hodina/měsíc/rok atd
datum1 a datum2 – výraz data/času
Dotaz na Najděte rozdíl mezi dvěma daty
SELECT DATEDIFF(day '2017-01-13' '2017-01-03') AS DateDiff;
výstup:
| DateDiff |
|---|
8. DATE_FORMAT() – Formát data a času
DATE_FORMAT() nám umožňuje formátovat a DATUM DATETIME nebo ČASOVÉ RAZÍTKO hodnotu do vlastního formátu pomocí zástupných symbolů.
Syntax:
DATE_FORMAT(formát data);
datum je platné datum a formát určuje výstupní formát pro datum/čas. Formáty, které lze použít, jsou:
- %a-Zkrácený název dne v týdnu (ne-so)
- %b-Zkrácený název měsíce (leden–prosinec)
- %c-měsíc numerický (0-12)
- %D-den v měsíci s anglickou příponou (0. 1. 2. 3.)
- %d-den v měsíci číselně (00-31)
- %e-Day v měsíci numerické (0-31)
- %f-mikrosekund (000000-999999)
- %H hodin (00-23)
- %h hodin (01-12)
- %I-Hour (01-12)
- %i-minuty numerické (00-59)
- %j-den v roce (001-366)
- %k-hodina (0-23)
- %l hodina (1–12)
- Název %M-měsíc (leden–prosinec)
- %m-měsíc číselně (00-12)
- %p-AM nebo PM
- %r-Time 12 hodin (hh:mm: ss následované AM nebo PM)
- %S-sekund (00-59)
- %s-sekund (00-59)
- %T-Time 24 hodin (hh:mm:ss)
- %U-Week (00-53), kde neděle je první den v týdnu
- %u-týden (00-53), kde pondělí je první den v týdnu
- %V-týden (01-53), kde neděle je první den v týdnu používaný s %X
- %v-týden (01-53), kde pondělí je první den v týdnu používaný s %x
- %W-Název dne v týdnu (neděle–sobota)
- %w-den v týdnu (0=neděle 6=sobota)
- %X-Year pro týden, kde neděle je první den v týdnu, čtyři číslice používané s %V
- %x-Year pro týden, kde pondělí je první den v týdnu, čtyři číslice používané s %v
- %Y-rok číselné čtyři číslice
- %y-rok číselné dvě číslice
Dotaz na formátování data
SELECT DATE_FORMAT('2025-04-10 12:34:56' '%W %M %d %Y') AS formatted_date;výstup:
slučovací třídicí algoritmus
| Formátované_datum |
|---|
| Čtvrtek 10. dubna 2025 |
Nejlepší postupy pro práci s datem a časem v MySQL
1. Vždy používejte správné formáty data
Při vkládání nebo aktualizaci dat se ujistěte, že dodržujete očekávané formáty MySQL (YYYY-MM-DD YYYY-MM-DD HH:MI:SS). To zajistí, že vaše dotazy vrátí očekávané výsledky bez chyb.
2. Úvahy o časovém pásmu s TIMESTAMP
ZatímcoDATETIMEneukládá informace o časovém pásmuTIMESTAMPdělá. Pokud je vaše aplikace citlivá na časové pásmo (například v mezinárodních aplikacích), zvažte použitíTIMESTAMPpro pole datum-čas, která potřebují zohlednit různá časová pásma.
3. Zpracování časových období v dotazech
Chcete-li filtrovat data na základě období (např. načíst všechny záznamy z určitého měsíce nebo roku), zajistěte, abyste vWHEREdoložka. Příklad:
SELECT * FROM orders
WHERE order_date BETWEEN '2025-01-01' AND '2025-01-31';
4. Úvahy o výkonu
Při práci s funkcemi data a času, zejména ve velkých souborech dat, mějte na paměti dopad na výkon. Vyhněte se používání funkcí jakoNOW()neboCURDATE()vWHEREklauzule, protože mohou zpomalit dotazy při práci s velkými tabulkami.
Závěr
Funkce data a času MySQL jsou nezbytnými nástroji zacházení a manipulující dočasná data ve vašich databázích. Zvládnutím funkcí jakoNOW() CURDATE() DATE_ADD() DATEDIFF()aDATE_FORMAT()můžete snadno pracovat výpočty založené na čase srovnání a formátů . Klíčem k efektivnímu používání těchto funkcí je porozumět jejich syntaxi, kdy a jak je používat, a jejich dopadům na výkon ve velkých souborech dat. S těmito znalostmi budete moci vytvářet efektivnější přesné a škálovatelné dotazy pro všechny vaše potřeby související s datem a časem v MySQL.