V SQL Server můžete použít DATEADD()
funkce pro přidání určitého časového období k danému datu. Můžete jej také použít k odečtení zadaného časového období.
Můžete také kombinovat DATEADD()
s dalšími funkcemi pro formátování data podle potřeby. Můžete například vzít „2020-10-03“, přidat 10 let a poté vrátit (zvýšenou) složku roku.
Tento článek obsahuje příklady k demonstraci.
Syntaxe
Syntaxe DATEADD()
vypadá takto:
DATEADD (datepart , number , date )
Kde datepart
je část data, kterou chcete zvýšit (nebo snížit), number
je částka ke zvýšení datepart
do a date
je datum, ke kterému dojde k přidání.
Příklad 1
Zde je základní příklad přidání deseti let k datu:
SELECT DATEADD(year, 10, '2020-10-03') AS 'Budoucí datum';
Výsledek:
+-------------------------+| Budoucí datum ||-------------------------|| 2030-10-03 00:00:00.000 |+-------------------------+
V tomto případě vrácená hodnota zahrnuje časovou složku i datum. Důvodem je, že výsledek je vrácen jako datetime hodnota. Důvod, proč je vrácen jako tento datový typ, je ten, že jsme jako date
dodali řetězcový literál argument. Když jako datum zadáte řetězcový literál, DATEADD()
vrátí datum a čas hodnotu.
V případech, kdy nedodáte řetězcový literál, je návratová hodnota stejná jako datový typ date
argument. Pokud například zadáte datetime2 vrácená hodnota bude datetime2 .
Příklad 2 – Formátování výsledku
Můžeme vzít výše uvedený výsledek a naformátovat jej pomocí FORMAT()
funkce:
ZVOLTE FORMÁT(DATEADD(rok, 10, '2020-10-03'), 'rrrr-MM-dd') JAKO 'rrrr-MM-dd', FORMAT(DATEADD(rok, 10, '2020-10) -03'), 'dd/MM/yyyy') JAKO 'dd/MM/rrrr', FORMAT(DATEADD(rok, 10, '2020-10-03'), 'yyyy') JAKO 'yyyy', FORMAT( DATEADD(rok, 10, '2020-10-03'); 'yy') JAKO 'yy';
Výsledek:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/rrrr | yyyy | yy ||--------------+--------------+--------+------|| 2030-10-03 | 03/10/2030 | 2030 | 30 |+--------------+--------------+--------+------+Je však důležité si uvědomit, že
FORMAT()
funkce vrátí svůj výsledek jako řetězec.Další možností je použít
CONVERT()
převést výsledek na datum datový typ:SELECT CONVERT(date, DATEADD(rok, 10, '2020-10-03')) AS Converted;Výsledek:
+--------------+| Převedeno ||--------------|| 2030-10-03 |+--------------+Nebo můžete použít funkci jako
YEAR()
, což vrátí výsledek jako celé číslo:VYBERTE ROK(DATEADD(rok, 10, '2020-10-03')) JAKO 'Budoucí rok';Výsledek:
+----------------+| Budoucí rok ||----------------|| 2030 |+---------------+Příklad 3 – Odečítání dat
K odečtení od data můžete použít záporná čísla:
SELECT DATEADD(rok, -10, '2020-10-03') AS 'Dřívější datum';Výsledek:
+-------------------------+| Dřívější datum ||-------------------------|| 2010-10-03 00:00:00.000 |+-------------------------+A samozřejmě to můžete naformátovat pomocí kterékoli z výše uvedených metod.
Příklad 4 – Systémová data
Zde je několik příkladů použití různých funkcí k vrácení aktuálního data/času z počítače, na kterém běží instance SQL Server.
SYSDATETIME()
VYBERTE SYSDATETIME() JAKO 'Aktuální datum', DATEADD(rok, 10, SYSDATETIME()) JAKO 'Budoucí datum';Výsledek:
+-----------------------------+---------------- -------------+| Aktuální datum | Budoucí datum ||-----------------------------+----------------- -------------|| 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 |+------------------------------+--------- ---------------------+SYSDATETIMEOFFSET()
VYBERTE SYSDATETIME() JAKO 'Aktuální datum', DATEADD(rok, 10, SYSDATETIME()) JAKO 'Budoucí datum';Výsledek:
+--------------------------+------------------- -------+| Aktuální datum | Budoucí datum ||--------------------------+------------------- -------|| 6.4.2018 6:02:07 +00:00 | 4/6/28 6:02:07 +00:00 |+--------------------------+------ --------------------+Jak již bylo zmíněno, tyto výsledky jsou vráceny pomocí datového typu
date
argument (protože to nejsou řetězcové literály).Formátování výstupu
VYBERTE ROK(SYSDATETIME()) JAKO 'Aktuální rok', YEAR(DATEADD(rok, 10, SYSDATETIME())) JAKO 'Budoucí rok';Výsledek:
+----------------+---------------+| Aktuální rok | Budoucí rok ||----------------+---------------|| 2018 | 2028 |+----------------+---------------+A jak již bylo zmíněno, pokud naformátujete datum, bude vráceno v datovém typu pro příslušnou funkci. V tomto příkladu je tedy výsledek vrácen jako int . Pokud bychom jej naformátovali pomocí
FORMAT()
funkce, bude vrácen jako řetězec.