Datová aritmetika v MySQL: DATE_ADD, DATE_SUB a INTERVAL (s praktickými příklady)

目次

1. Úvod

MySQL je RDBMS (Relational Database Management System), které se široce používá pro webové aplikace a správu databází. Mezi jeho mnoha funkcemi jsou operace s daty jednou z nejdůležitějších funkcí, které vývojáři používají každý den. Například existuje nespočet scénářů zahrnujících data, jako je nastavení opakujících se připomínek, extrakce dat v určitém časovém rozsahu a výpočet plánů.

Zvláště přidávání a odebírání dat se používá často. MySQL poskytuje pohodlné funkce jako DATE_ADD a DATE_SUB, spolu s klauzulí INTERVAL pro specifikaci trvání. Pomocí těchto můžete udržet kód stručný a efektivně provádět složité výpočty dat.

V tomto článku vysvětlíme přidávání a odebírání dat v MySQL způsobem přátelským pro začátečníky. Pokryjeme vše od základního použití po pokročilé příklady a poskytneme praktické know-how, které můžete použít v reálných projektech. Vysvětlíme také běžné problémy a důležité body, na které je třeba dávat pozor, takže i když si nejste jisti manipulací s daty, můžete se učit pohodlně.

Do doby, než dokončíte čtení, budete mít znalosti a praktické techniky potřebné pro operace s daty v MySQL – a budete je schopni aplikovat na své vlastní projekty.

2. Základní znalosti potřebné pro operace s daty v MySQL

Při práci s daty v MySQL je důležité nejprve pochopit typy dat a času a základní koncepty. Tato sekce vysvětluje základní znalosti potřebné pro operace s daty v MySQL.

Typy dat a času

MySQL poskytuje několik typů dat pro manipulaci s daty a časy. Je důležité pochopit charakteristiky každého typu a vybrat vhodný.

  1. DATE
  • Ukládá kalendářní datum (rok, měsíc, den).
  • Formát: YYYY-MM-DD
  • Příklad: 2025-01-01
  • Používejte ho, když potřebujete pouze datum (např. narozeniny, datum vytvoření).
  1. DATETIME
  • Ukládá datum a čas.
  • Formát: YYYY-MM-DD HH:MM:SS
  • Příklad: 2025-01-01 12:30:45
  • Používejte ho, když potřebujete datum i čas (např. časové razítko události).
  1. TIMESTAMP
  • Ukládá datum/čas na základě UTC (Coordinated Universal Time) a podporuje konverzi časových zón.
  • Formát: YYYY-MM-DD HH:MM:SS
  • Příklad: 2025-01-01 12:30:45
  • Používá se, když jsou potřebná data citlivá na časovou zónu nebo pro systémové logy.
  1. TIME
  • Ukládá hodnotu času.
  • Formát: HH:MM:SS
  • Příklad: 12:30:45
  • Používejte ho, když potřebujete čistou hodnotu času (např. provozní hodiny).
  1. YEAR
  • Ukládá pouze hodnotu roku.
  • Formát: YYYY
  • Příklad: 2025
  • Používejte ho při správě dat na úrovni roku.

Důležité poznámky při používání typů dat a času

  • Nastavení časové zóny MySQL používá nastavení časové zóny serveru jako výchozí. Nicméně, pokud vaše aplikace používá jinou časovou zónu, mohou nastat nesrovnalosti dat. Nastavte časovou zónu explicitně, když je to potřeba.
  • Zpracování neplatných dat Výchozí nastavení MySQL je házet chybu, pokud je specifikováno neplatné datum (např. 2025-02-30 ). Nicméně, v závislosti na konfiguraci serveru, může být převedeno na NULL nebo výchozí hodnotu, takže je důležité ověřit svá nastavení.

Běžné použití operací s daty

  1. Extrakce dat pro specifické období
  • Příklad: Získat prodejní data z minulého týdne.
  1. Výpočty plánů
  • Příklad: Odeslat upozornění 30 dní po registraci uživatele.
  1. Správa dat vypršení platnosti
  • Příklad: Spravovat data vypršení platnosti kupónů.

Shrnutí základů

MySQL poskytuje výkonná nástroje pro manipulaci s daty a časy. Pochopením typů dat a času a vhodným výběrem můžete zlepšit návrh databáze a efektivitu dotazů. V další sekci se podrobněji podíváme na funkci DATE_ADD jako konkrétní metodu pro operace s daty.

3. Funkce DATE_ADD: Základy a praktické použití

The MySQL DATE_ADD function je pohodlný nástroj používaný k přidání zadaného intervalu k datu. Tato sekce vysvětluje vše od základního použití po praktické příklady.

What Is DATE_ADD?

DATE_ADD přidá dobu specifikovanou v klauzuli INTERVAL k danému datu a vrátí nové datum. Je to základní nástroj pro zjednodušení výpočtů dat.

Basic syntax:

DATE_ADD(date, INTERVAL value unit)
  • date : Datum nebo datetime, na který se operuje.
  • value : Číslo, které se má přidat.
  • unit : Jednotka intervalu (např. DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).

Available INTERVAL Units

Můžete použít následující jednotky INTERVAL s DATE_ADD.

UnitDescription
SECONDSeconds
MINUTEMinutes
HOURHours
DAYDays
WEEKWeeks
MONTHMonths
YEARYears

Basic Examples

Zde jsou konkrétní příklady DATE_ADD.

  1. Calculate 1 day later :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY);
    

Result: 2025-01-02

  1. Calculate 1 month later :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 MONTH);
    

Result: 2025-02-01

  1. Calculate 1 year later :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 YEAR);
    

Result: 2026-01-01

  1. Calculate 3 hours later :
    SELECT DATE_ADD('2025-01-01 12:00:00', INTERVAL 3 HOUR);
    

Result: 2025-01-01 15:00:00

  1. Add multiple units (using nesting) :
    SELECT DATE_ADD(DATE_ADD('2025-01-01', INTERVAL 1 DAY), INTERVAL 3 HOUR);
    

Result: 2025-01-02 03:00:00

Dynamic Date Calculations

Můžete také použít DATE_ADD na dynamicky vypočítaná data.

  1. Calculate 7 days from today :
    SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY);
    

Result: The date 7 days from today.

  1. Calculate 30 minutes from now :
    SELECT DATE_ADD(NOW(), INTERVAL 30 MINUTE);
    

Result: The datetime 30 minutes from now.

Practical Examples

  1. Calculating an expiration date : Calculate a 30-day warranty period from the purchase date.
    SELECT DATE_ADD(purchase_date, INTERVAL 30 DAY) AS expiry_date
    FROM orders;
    
  1. Sending a reservation reminder : Calculate 3 days before an event date and send a reminder.
    SELECT DATE_ADD(event_date, INTERVAL -3 DAY) AS reminder_date
    FROM events;
    
  1. Calculating log retention cutoff : Calculate 90 days before today and delete logs older than that.
    DELETE FROM logs
    WHERE log_date < DATE_ADD(CURDATE(), INTERVAL -90 DAY);
    

Notes

  • Handling invalid dates : If the result of DATE_ADD becomes an invalid date, MySQL may return NULL . Make sure the input data is in a valid format.
  • Timezone impact : If you’re using timezones, functions like CURRENT_TIMESTAMP and NOW() may be affected.

DATE_ADD is one of the most basic yet powerful tools for MySQL date operations. Once you master it, you’ll be able to handle many date calculations efficiently. In the next section, we’ll cover the DATE_SUB function in detail.

4. DATE_SUB Function: Basics and Practical Usage

DATE_SUB is the counterpart to DATE_ADD in MySQL. It’s used to subtract a specified interval from a date. This section explains the basics and practical examples you can use in real work.

What Is DATE_SUB?

DATE_SUB subtracts the duration specified in an INTERVAL clause from a given date or datetime and returns a new date. It’s a convenient tool for date subtraction.

Basic syntax:

DATE_SUB(date, INTERVAL value unit)
  • date : The date or datetime to operate on.
  • value : The number to subtract.
  • unit : The interval unit (e.g., DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).

Basic Examples

Here are concrete examples of DATE_SUB.

  1. Calculate 1 day earlier :
    SELECT DATE_SUB('2025-01-01', INTERVAL 1 DAY);
    

Result: 2024-12-31

  1. Calculate 1 month earlier :
    SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH);
    

Result: 2024-12-01

  1. Calculate 1 year earlier :
    SELECT DATE_SUB('2025-01-01', INTERVAL 1 YEAR);
    

Výsledek: 2024-01-01

  1. Vypočítejte 3 hodiny dříve :
    SELECT DATE_SUB('2025-01-01 12:00:00', INTERVAL 3 HOUR);
    

Výsledek: 2025-01-01 09:00:00

  1. Odečtěte více jednotek (pomocí vnořování) :
    SELECT DATE_SUB(DATE_SUB('2025-01-01', INTERVAL 1 DAY), INTERVAL 3 HOUR);
    

Výsledek: 2024-12-31 21:00:00

Dynamické výpočty dat

Můžete také použít DATE_SUB na základě dynamických dat.

  1. Vypočítejte 7 dní před dneškem :
    SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY);
    

Výsledek: Datum 7 dní před dneškem.

  1. Vypočítejte 30 minut před teď :
    SELECT DATE_SUB(NOW(), INTERVAL 30 MINUTE);
    

Výsledek: Datetime 30 minut před teď.

Praktické příklady

  1. Načtěte data z posledních 30 dní :
    SELECT * 
    FROM orders
    WHERE order_date > DATE_SUB(CURDATE(), INTERVAL 30 DAY);
    
  1. Smažte data starší 90 dní :
    DELETE FROM logs
    WHERE log_date < DATE_SUB(CURDATE(), INTERVAL 90 DAY);
    
  1. Upozornění na připomínku : Nastavte připomínku na 1 den před zahájením události.
    SELECT event_name, DATE_SUB(event_date, INTERVAL 1 DAY) AS reminder_date
    FROM events;
    
  1. Výpočet směny : Vypočítejte 3 hodiny před časem zahájení směny.
    SELECT DATE_SUB(shift_start, INTERVAL 3 HOUR) AS preparation_time
    FROM work_shifts;
    

Poznámky

  • Zpracování neplatných dat : Pokud výsledek odečítání vede k neplatnému datu, MySQL může vrátit NULL . Je důležité ověřit původní datum.
  • Vliv časové zóny : Pokud se nastavení časové zóny serveru liší, výsledky z DATE_SUB se mohou neočekávaně posunout. Používejte CONVERT_TZ(), když je to potřeba.

DATE_SUB je stejně důležitý jako DATE_ADD pro operace s daty v MySQL. Zachováním stručnosti logiky odečítání můžete zlepšit efektivitu v řízení dat a analýze. V další části vysvětlíme 5. Podrobnosti o klauzuli INTERVAL a jak ji používat.

5. Podrobnosti o klauzuli INTERVAL a jak ji používat

Klauzule INTERVAL se používá v operacích s daty a časy v MySQL, obvykle společně s DATE_ADD a DATE_SUB, k přidání nebo odečtení trvání. Tato část vysvětluje klauzuli INTERVAL podrobně, od základů po pokročilé použití.

Základy klauzule INTERVAL

Klauzule INTERVAL určuje, o kolik času se má přidat nebo odečíst od cílového data. Často se používá s DATE_ADD a DATE_SUB, což umožňuje výkonné operace s daty pomocí stručného syntaxe.

Základní syntaxe:

SELECT date + INTERVAL value unit;
SELECT date - INTERVAL value unit;
  • date : Datum nebo datetime, na kterém se operace provádí.
  • value : Číselná hodnota k přidání nebo odečtení.
  • unit : Jednotka operace (např. DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).

Dostupné jednotky

Následující jednotky lze použít v klauzuli INTERVAL.

UnitDescription
SECONDSeconds
MINUTEMinutes
HOURHours
DAYDays
WEEKWeeks
MONTHMonths
QUARTERQuarters
YEARYears
SECOND_MICROSECONDSeconds and microseconds
MINUTE_MICROSECONDMinutes and microseconds
MINUTE_SECONDMinutes and seconds
HOUR_MICROSECONDHours and microseconds
HOUR_SECONDHours and seconds
HOUR_MINUTEHours and minutes
DAY_MICROSECONDDays and microseconds
DAY_SECONDDays and seconds
DAY_MINUTEDays and minutes
DAY_HOURDays and hours
YEAR_MONTHYears and months

Základní příklady

  1. Přidejte 1 den k datu :
    SELECT '2025-01-01' + INTERVAL 1 DAY;
    

Výsledek: 2025-01-02

  1. Odečtěte 3 hodiny od datetime :
    SELECT '2025-01-01 12:00:00' - INTERVAL 3 HOUR;
    

Výsledek: 2025-01-01 09:00:00

  1. Odečtěte 10 minut od aktuálního datetime :
    SELECT NOW() - INTERVAL 10 MINUTE;
    
  1. Vypočítejte první den následujícího měsíce z konce měsíce :
    SELECT LAST_DAY('2025-01-01') + INTERVAL 1 DAY;
    

Výsledek: 1. den následujícího měsíce.

Pokročilé příklady

  1. Výpočet rozsahu dat Vypočítejte rozsah pro posledních 30 dní.
    SELECT *
    FROM orders
    WHERE order_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE();
    
  1. Vypočítejte datum zahájení následujícího čtvrtletí
    SELECT '2025-01-01' + INTERVAL 1 QUARTER;
    

Výsledek: Datum zahájení následujícího čtvrtletí.

  1. Výpočet času s ohledem na časovou zónu Získejte datetime o jednu hodinu později vypočítané v výchozí časové zóně serveru.
    SELECT CONVERT_TZ(NOW(), 'SYSTEM', '+09:00') + INTERVAL 1 HOUR;
    
  1. Proveďte složitější výpočet Vypočítejte datum dva týdny od dneška a poté získejte poslední den toho měsíce.
    SELECT LAST_DAY(CURDATE() + INTERVAL 14 DAY);
    

Poznámky

  1. Buďte si vědomi typu výsledku Výsledek výpočtu INTERVAL zachovává původní typ (DATE nebo DATETIME). Správně zacházejte s datovými typy.
  2. Chování na konci měsíce Při přidávání/odečítání na konci měsíce může MySQL upravit datum na konec nebo začátek následujícího měsíce. Například přidání 1 měsíce k 2025-01-31 vede k 2025-02-28 (nepřestupný rok).
  3. Vliv časového pásma Pokud jsou na serveru a klientovi nastaveny různé časové pásma, výpočty datum/čas mohou neočekávaně posunout.

Klauzule INTERVAL je klíčovým nástrojem pro zjednodušení operací s daty v MySQL. Díky její flexibilitě můžete snadno zvládat složité výpočty dat. V další sekci vysvětlíme 6. Praktické příklady.

6. Praktické příklady

Použití funkce DATE_ADD v MySQL a klauzule INTERVAL usnadňuje složité výpočty dat a dynamické zpracování. Tato sekce představuje několik praktických příkladů, které jsou užitečné v reálné práci.

1. Extrahování dat v konkrétním období

V analýze dat a reportingu je běžné extrahovat záznamy v konkrétním časovém rozmezí.

Příklad 1: Získat prodejní data z posledních 30 dnů

SELECT *
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;

Vysvětlení: Extrahuje data k datu nebo po datu, které je 30 dnů před dneškem.

Příklad 2: Získat data za předchozí měsíc

SELECT *
FROM orders
WHERE order_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE();

Vysvětlení: Získá objednávkové data za předchozí měsíc.

2. Nastavování připomínek událostí

Můžete nastavit připomínkové notifikace na základě dat zahájení události nebo termínů.

Příklad: Odeslat notifikaci 3 dny před zahájením události

SELECT event_name, DATE_SUB(event_date, INTERVAL 3 DAY) AS reminder_date
FROM events;

Vysvětlení: Vypočítá datum 3 dny před datem události a nastaví jej jako datum notifikace.

3. Správa data expirace

Výpočet data expirace na základě data registrace se používá v mnoha aplikacích.

Příklad 1: Vypočítat datum expirace 30 dnů po registraci

SELECT user_id, registration_date, DATE_ADD(registration_date, INTERVAL 30 DAY) AS expiry_date
FROM users;

Vysvětlení: Vypočítá datum expirace 30 dnů po datu registrace.

Příklad 2: Smazat expirovaná data

DELETE FROM sessions
WHERE expiry_date < NOW();

Vysvětlení: Smaže data sezení, která expirovala na základě aktuálního datum/čas.

4. Výpočty směn a rozvrhů

Příklady úpravy časů na základě začátku nebo konce pracovních rozvrhů.

Příklad: Vypočítat 1 hodinu před začátkem směny

SELECT shift_id, shift_start, DATE_SUB(shift_start, INTERVAL 1 HOUR) AS preparation_time
FROM shifts;

Vysvětlení: Vypočítá 1 hodinu před začátkem směny a zobrazí ji jako čas přípravy.

5. Výpočty kombinující více INTERVALů

Příklady kombinování více časových úseků ve výpočtech.

Příklad 1: Získat poslední den měsíce jeden měsíc od dneška

SELECT LAST_DAY(CURDATE() + INTERVAL 1 MONTH);

Vysvětlení: Vypočítá poslední den měsíce jeden měsíc po dnešku.

Příklad 2: Přidat 3měsíční odklad po 1 roce od registrace

SELECT user_id, DATE_ADD(DATE_ADD(registration_date, INTERVAL 1 YEAR), INTERVAL 3 MONTH) AS final_deadline
FROM users;

Vysvětlení: Vypočítá konečný termín přidáním 1 roku a následně dalších 3 měsíců od data registrace.

6. Čištění dat a optimalizace

Příklady optimalizace databáze mazáním starých dat.

Příklad: Smazat uživatele, kteří se nepřihlásili během posledních 90 dnů

DELETE FROM user_activity
WHERE last_login < CURDATE() - INTERVAL 90 DAY;

Vysvětlení: Odstraňuje uživatele, jejichž poslední přihlášení je starší než 90 dní od dnešního dne.

Poznámky

  • Ověřte výsledky výpočtů : Věnujte zvláštní pozornost hraničním případům, jako je konec měsíce a přestupné roky.
  • Zajistěte konzistenci datových typů : Specifikace správných typů datum/čas (DATE, DATETIME, atd.) pomáhá předcházet chybám.
  • Zvažte časová pásma : Při práci napříč různými časovými pásmy použijte funkci CONVERT_TZ().

Použitím DATE_ADD a klauzule INTERVAL můžete efektivně zjednodušit operace s daty v reálné práci. V následující sekci podrobně vysvětlíme 7. Poznámky a osvědčené postupy.

7. Poznámky a osvědčené postupy

Operace s daty v MySQL jsou mimořádně užitečné, ale při jejich používání v reálné práci je třeba pochopit několik klíčových bodů a osvědčených postupů. Tato sekce vysvětluje, na co si dát pozor a jak efektivně využívat operace s daty.

Poznámky

1. Konzistence datových typů

  • Problém : V MySQL se výsledky mohou lišit v závislosti na datovém typu použitém pro operace s datumem/časem (DATE, DATETIME, TIMESTAMP, atd.).
  • Příklad :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY); -- Valid operation
    SELECT DATE_ADD('Invalid Date', INTERVAL 1 DAY); -- Returns NULL for an invalid date
    
  • Opatření : Ověřte, že vstupní data jsou předem ve správném formátu, a zvolte vhodné datové typy.

2. Zpracování neplatných dat

  • Problém : Výpočty zahrnující konec měsíce nebo přestupné roky mohou vytvářet obtížné hraniční případy.
  • Příklad :
    SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH); -- Result: 2025-02-28
    

V tomto případě MySQL upraví automaticky, ale výsledek se může lišit od toho, co jste zamýšleli.

  • Opatření : Při zpracování dat konce měsíce ověřte pomocí funkce LAST_DAY().
    SELECT LAST_DAY('2025-01-31') + INTERVAL 1 MONTH;
    

3. Úvahy o časových pásmech

  • Problém : Pokud se časové pásmo serveru liší od časového pásma aplikace, mohou nastat nesrovnalosti v datech nebo neočekávané výsledky.
  • Příklad :
    SELECT NOW(); -- Depends on the server timezone
    
  • Opatření : Nastavte časové pásmo explicitně.
    SELECT CONVERT_TZ(NOW(), 'SYSTEM', '+09:00'); -- Convert to Japan time
    

4. Výkon u složitých výpočtů

  • Problém : Dotazy s komplexními výpočty dat mohou ovlivnit rychlost provádění.
  • Opatření : Omezte zbytečné výpočty a optimalizujte dotazy pomocí indexů.

Osvědčené postupy

1. Používejte standardní formáty

  • Udržujte formáty dat konzistentní.
  • Doporučené formáty: YYYY-MM-DD (DATE), YYYY-MM-DD HH:MM:SS (DATETIME).
  • Příklad :
    SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
    

2. Kombinujte funkce efektivně

  • Kombinace DATE_ADD/DATE_SUB s LAST_DAY nebo CURDATE umožňuje flexibilnější výpočty.
  • Příklad :
    SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));
    

3. Plánujte dynamické operace s daty pečlivě

  • Při práci s dynamickými daty rozdělte dotazy a zpracovávejte je krok po kroku.
  • Příklad :
    SET @next_month = DATE_ADD(CURDATE(), INTERVAL 1 MONTH);
    SELECT LAST_DAY(@next_month);
    

4. Spravujte časová pásma bezpečně

  • Udržujte časová pásma konzistentní mezi serverem a klientem.
  • Příklad :
    SET time_zone = '+09:00';
    

5. Ověřujte v testovacím prostředí

  • Otestujte komplexní výpočty dat a výpočty napříč různými časovými pásmy předem.

Vyhněte se běžným úskalím při operacích s daty

Operace s daty jsou důležitou dovedností, která může výrazně ovlivnit návrh databáze a přesnost dotazů. Porozuměním úskalím a dodržováním osvědčených postupů můžete předejít problémům a dosáhnout efektivní manipulace s daty.

8. Často kladené otázky

Zde jsou často kladené otázky (FAQ) týkající se operací s daty v MySQL. Tyto odpovědi se zaměřují na běžné body, o které se často zajímají uživatelé od začátečníků po středně pokročilé.

Q1: Jaký je rozdíl mezi DATE_ADD a použitím operátoru + s INTERVAL?

A1:

  • DATE_ADD() je specializovaná funkce pro výpočty dat a lépe se vypořádává s chybami a konverzí typů.
  • + INTERVAL je jednodušší, ale v některých případech může dojít k chybám při konverzi typů.

Příklad: Použití DATE_ADD:

SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY);

Příklad: Použití operátoru + s INTERVAL:

SELECT '2025-01-01' + INTERVAL 1 DAY;

Obecně se doporučuje používat DATE_ADD().

Q2: Může DATE_ADD přidat více intervalů najednou?

A2:
Ne. DATE_ADD() může najednou specifikovat jen jeden interval. Nicméně můžete vnořit více volání DATE_ADD(), abyste dosáhli požadovaného efektu.

Příklad: Přidání více intervalů:

SELECT DATE_ADD(DATE_ADD('2025-01-01', INTERVAL 1 DAY), INTERVAL 1 MONTH);

Q3: Jak mohu změnit formát data v MySQL?

A3:
Použijte funkci DATE_FORMAT(), která umožňuje formátovat datum/čas podle vašich potřeb.

Příklad: Převod formátu:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date;

Výsledek: 2025-01-01 12:30:45

Q4: Co se stane, když přidám 1 měsíc k datu na konci měsíce?

A4:
MySQL automaticky upraví výsledek a stane se posledním dnem následujícího měsíce.

Příklad:

SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);

Výsledek: 2025-02-28

Toto chování je pohodlné, ale měli byste si ověřit, zda odpovídá vaší zamýšlené logice.

Q5: Jak provádět výpočty datumů s ohledem na časové pásmo?

A5:
Použijte funkci MySQL CONVERT_TZ(), která umožňuje specifikovat časové pásmo.

Příklad: Převod z UTC na japonský čas:

SELECT CONVERT_TZ('2025-01-01 12:00:00', 'UTC', '+09:00') AS japan_time;

Q6: Co se stane, když je v DATE_ADD zadáno neplatné datum?

A6:
Pokud je zadáno neplatné datum (např. 2025-02-30), MySQL vrátí NULL.

Příklad:

SELECT DATE_ADD('2025-02-30', INTERVAL 1 DAY);

Výsledek: NULL

Doporučuje se předem validovat vstupy.

Q7: Jak nastavit podmínky založené na minulých nebo budoucích datech?

A7:
Použijte DATE_ADD nebo DATE_SUB k výpočtu referenčního data a poté použijte tento výsledek ve své klauzuli WHERE.

Příklad: Získání dat za posledních 30 dní:

SELECT * 
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;

Q8: Jaké jsou osvědčené postupy při práci s více časovými pásmy?

A8:

  • Ukládejte všechna data typu datetime v UTC.
  • Při potřebě je převádějte na požadované časové pásmo na straně klienta.

Příklad: Uložení dat v UTC:

SET time_zone = '+00:00';

Q9: Mohu v MySQL pracovat s daty a časy odděleně?

A9:
Ano. Použijte DATE() nebo TIME() k extrakci pouze datové nebo časové části.

Příklad 1: Extrahovat jen datum:

SELECT DATE(NOW());

Příklad 2: Extrahovat jen čas:

SELECT TIME(NOW());

Q10: Mohu použít jednotky, které MySQL INTERVAL nepodporuje?

A10:
MySQL podporuje pevně danou sadu jednotek INTERVAL. Pokud potřebujete něco jiného, převedete to na vhodnou podporovanou jednotku.

9. Shrnutí

Operace s daty v MySQL jsou klíčovou dovedností pro návrh a provoz databází. Pomocí DATE_ADD, DATE_SUB a klauzule INTERVAL můžete snadno a efektivně provádět složité výpočty datumů.

Klíčové poznatky

  1. Základy typů datum/čas :
  • V MySQL je nutné správně používat typy datum/čas, jako jsou DATE, DATETIME a TIMESTAMP.
  1. DATE_ADD a DATE_SUB :
  • Praktické funkce pro přidávání nebo odečítání datumů, s flexibilními operacemi pomocí jednoduché syntaxe.
  1. Klauzule INTERVAL :
  • Nezbytný nástroj pro efektivní výpočty datumů pomocí jednotek jako roky, měsíce, dny a hodiny.
  1. Praktické příklady :
  • Užitečné pro mnoho scénářů, jako je získávání minulých nebo budoucích dat, správa expirací a nastavení připomenutí.
  1. Poznámky a osvědčené postupy :
  • Je důležité pochopit úvahy jako konzistence datových typů, dopad časových pásem a úpravy na konci měsíce.
  1. FAQ :
  • Poskytl konkrétní řešení běžných otázek a problémů, se kterými se začátečníci často setkávají.

Další kroky

  • Použijte to, co jste se naučili :
  • Vyzkoušejte použití DATE_ADD a DATE_SUB ve svém vlastním projektu k procvičování operací s daty.
  • Navrhujte s ohledem na časová pásma :
  • V databázích fungujících napříč více časovými pásmy je přesná správa časových pásem a výpočty dat kritické.
  • Další optimalizace :
  • Navrhujte efektivní dotazy a používejte indexy s ohledem na výkon pro lepší operace s daty.

Ovládnutí operací s daty v MySQL výrazně zlepší efektivitu správy a analýzy dat. Používejte tento článek jako referenci a aktivně aplikujte tyto praktické dovednosti ve své práci.