W SQL Server możesz użyć DATEADD() funkcja dodawania określonego przedziału czasu do podanej daty. Możesz go również użyć do odjęcia określonego okresu czasu.
Możesz także połączyć DATEADD() z innymi funkcjami, aby sformatować datę zgodnie z wymaganiami. Na przykład możesz wziąć „2020-10-03”, dodać 10 lat, a następnie zwrócić (zwiększony) składnik roku.
Ten artykuł zawiera przykłady do zademonstrowania.
Składnia
Składnia DATEADD() idzie tak:
DATEADD (datepart , number , date )
Gdzie datepart jest częścią daty, którą chcesz zwiększyć (lub zmniejszyć), number to kwota do zwiększenia datepart do i date to data, do której nastąpi dodanie.
Przykład 1
Oto podstawowy przykład dodawania dziesięciu lat do daty:
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';
Wynik:
+-------------------------+ | Future Date | |-------------------------| | 2030-10-03 00:00:00.000 | +-------------------------+
W takim przypadku zwracana wartość obejmuje składnik czasu oraz datę. Dzieje się tak, ponieważ wynik jest zwracany jako data i godzina wartość. Powodem, dla którego jest zwracany jako ten typ danych, jest to, że jako date dostarczyliśmy literał ciągu znaków argument. Gdy jako datę podasz literał ciągu, DATEADD() zwraca datęgodzinę wartość.
W przypadkach, w których nie podasz literału ciągu, zwracana wartość jest taka sama jak typ danych date argument. Na przykład, jeśli podasz datetime2 argumentem, zwróconą wartością będzie datetime2 .
Przykład 2 – Formatowanie wyniku
Możemy wziąć powyższy wynik i sformatować go za pomocą FORMAT() funkcja:
SELECT
FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd',
FORMAT(DATEADD(year, 10, '2020-10-03'), 'dd/MM/yyyy') AS 'dd/MM/yyyy',
FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy') AS 'yyyy',
FORMAT(DATEADD(year, 10, '2020-10-03'), 'yy') AS 'yy';
Wynik:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/yyyy | yyyy | yy | |--------------+--------------+--------+------| | 2030-10-03 | 03/10/2030 | 2030 | 30 | +--------------+--------------+--------+------+
Należy jednak pamiętać, że FORMAT() funkcja zwraca swój wynik jako ciąg znaków.
Inną opcją jest użycie CONVERT() przekonwertować wynik na datę typ danych:
SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;
Wynik:
+-------------+ | Converted | |-------------| | 2030-10-03 | +-------------+
Możesz też użyć funkcji takiej jak YEAR() , który zwraca wynik jako liczbę całkowitą:
SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';
Wynik:
+---------------+ | Future Year | |---------------| | 2030 | +---------------+
Przykład 3 – Odejmowanie dat
Możesz użyć liczb ujemnych, aby odjąć od daty:
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';
Wynik:
+-------------------------+ | Earlier Date | |-------------------------| | 2010-10-03 00:00:00.000 | +-------------------------+
I oczywiście możesz to sformatować za pomocą dowolnej z wcześniej wymienionych metod.
Przykład 4 – Daty systemowe
Oto kilka przykładów użycia różnych funkcji do zwracania bieżącej daty/godziny z komputera, na którym uruchomiona jest instancja SQL Server.
SYSDATETIME()
SELECT
SYSDATETIME() AS 'Current Date',
DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Wynik:
+-----------------------------+-----------------------------+ | Current Date | Future Date | |-----------------------------+-----------------------------| | 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 | +-----------------------------+-----------------------------+
SYSDATETIMEOFFSET()
SELECT
SYSDATETIME() AS 'Current Date',
DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Wynik:
+--------------------------+--------------------------+ | Current Date | Future Date | |--------------------------+--------------------------| | 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 | +--------------------------+--------------------------+
Jak wspomniano, te wyniki są zwracane przy użyciu typu danych date argument (ponieważ nie są literałami łańcuchowymi).
Formatowanie wyjścia
SELECT
YEAR(SYSDATETIME()) AS 'Current Year',
YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';
Wynik:
+----------------+---------------+ | Current Year | Future Year | |----------------+---------------| | 2018 | 2028 | +----------------+---------------+
Jak również wspomniano, jeśli sformatujesz datę, zostanie ona zwrócona w typie danych dla odpowiedniej funkcji. W tym przykładzie wynik jest zwracany jako int . Gdybyśmy sformatowali to za pomocą FORMAT() funkcja zostanie zwrócona jako ciąg znaków.