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.