sql >> Databáze >  >> RDS >> Sqlserver

Příklady DATEADD() v SQL Server

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.


  1. Jak vložit datovou tabulku do databázové tabulky SQL Serveru?

  2. Nelze nainstalovat pg gem na Mountain Lion

  3. Co je systém správy databází a relačních databází (RDBMS)

  4. Vytvořte Computed Column v SQL Server pomocí T-SQL