Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

DATEADD() Przykłady w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Logowanie nie powiodło się dla użytkownika „DOMAIN\MACHINENAME$”

  2. Nie udało się zaktualizować bazy danych .mdf, ponieważ baza danych jest tylko do odczytu (aplikacja Windows)

  3. Aktualizacja konta pocztowego bazy danych w programie SQL Server (T-SQL)

  4. Jak ISNUMERIC() działa w SQL Server

  5. Jak zaimportować plik DBF do SQL Server