Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

DATEADD() Примери в SQL Server

В SQL Server можете да използвате DATEADD() функция за добавяне на определен период от време към дадена дата. Можете също да го използвате, за да извадите определен период от време.

Можете също да комбинирате DATEADD() с други функции, за да форматирате датата според изискванията. Например, можете да вземете „2020-10-03“, да добавите 10 години, след което да върнете компонента (увеличена) година.

Тази статия съдържа примери за демонстрация.

Синтаксис

Синтаксисът на DATEADD() става така:

DATEADD (част от дата, номер, дата)

Където datepart е частта от датата, която искате да бъде увеличена (или намалена), number е сумата за увеличаване datepart до и date е датата, до която ще се извърши добавянето.

Пример 1

Ето основен пример за добавяне на десет години към дата:

ИЗБЕРЕТЕ DATEADD(година, 10, '2020-10-03') КАТО 'Бъдеща дата';

Резултат:

+------------------------+| Бъдеща дата ||-----------------------|| 2030-10-03 00:00:00.000 |+-------------------------+

В този случай върнатата стойност включва компонента за време, както и датата. Това е така, защото резултатът се връща като дата и час стойност. Причината да бъде върнат като този тип данни е, защото предоставихме литерал на низ като date аргумент. Когато предоставите низов литерал като дата, DATEADD() връща datetime стойност.

В случаите, когато не предоставите низов литерал, връщаната стойност е същата като типа данни на date аргумент. Например, ако предоставите datetime2 аргумент, връщаната стойност ще бъде datetime2 .

Пример 2 – Форматиране на резултата

Можем да вземем горния резултат и да го форматираме с FORMAT() функция:

ИЗБЕРЕТЕ ФОРМАТ(DATEADD(година, 10, '2020-10-03'), 'yyyy-MM-dd') КАТО 'yyyy-MM-dd', FORMAT(DATEADD(година, 10, '2020-10) -03'), 'дд/ММ/гггг') КАТО 'дд/ММ/гггг', FORMAT(DATEADD(година, 10, '2020-10-03'), 'гггг') КАТО 'гггг', FORMAT( DATEADD(година, 10, '2020-10-03'), 'yy') КАТО 'yy';

Резултат:

+--------------+--------------+-------+-----+ | гггг-ММ-дд | дд/ММ/гггг | yyyy | yy ||--------------+--------------+-------+------|| 2030-10-03 | 03/10/2030 | 2030 г. | 30 |+--------------+--------------+-------+-----+ 

Но е важно да се отбележи, че FORMAT() функцията връща резултата си като низ.

Друга опция е да използвате CONVERT() за да конвертирате резултата в дата тип данни:

ИЗБЕРЕТЕ CONVERT(дата, DATEADD(година, 10, '2020-10-03')) КАТО преобразувано;

Резултат:

+------------+| Преобразувано ||-------------|| 2030-10-03 |+------------+

Или можете да използвате функция като YEAR() , което връща резултата като цяло число:

ИЗБЕРЕТЕ ГОДИНА(DATEADD(година, 10, '2020-10-03')) КАТО 'Бъдеща година';

Резултат:

+---------------+| Бъдеща година ||--------------|| 2030 |+---------------+

Пример 3 – Изваждане на дати

Можете да използвате отрицателни числа, за да извадите от датата:

ИЗБЕРЕТЕ DATEADD(година, -10, '2020-10-03') КАТО 'По-ранна дата';

Резултат:

+------------------------+| По-ранна дата ||-----------------------|| 2010-10-03 00:00:00,000 |+-------------------------+

И разбира се, можете да форматирате това, като използвате някой от методите, споменати по-горе.

Пример 4 – Системни дати

Ето няколко примера за използване на различни функции за връщане на текущата дата/час от компютъра, на който се изпълнява екземплярът на SQL Server.

SYSDATETIME()

ИЗБЕРЕТЕ SYSDATETIME() КАТО 'Текуща дата', DATEADD(година, 10, SYSDATETIME()) КАТО 'Бъдеща дата';

Резултат:

+----------------------------+---------------- ------------+| Текуща дата | Бъдеща дата ||----------------------------+---------------- ------------|| 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 |+----------------------------+-------- ---------------------+

SYSDATETIMEOFFSET()

ИЗБЕРЕТЕ SYSDATETIME() КАТО 'Текуща дата', DATEADD(година, 10, SYSDATETIME()) КАТО 'Бъдеща дата';

Резултат:

+--------------------+------------------- -------+| Текуща дата | Бъдеща дата ||--------------------+------------------ -------|| 06.04.18 6:02:07 ч. +00:00 | 06.04.28 6:02:07 ч. +00:00 |+--------------------------+------ --------------------+

Както споменахме, тези резултати се връщат с помощта на типа данни на date аргумент (тъй като те не са низови литерали).

Форматиране на изхода

ИЗБЕРЕТЕ ГОДИНА(SYSDATETIME()) КАТО 'Текуща година', YEAR(DATEADD(година, 10, SYSDATETIME())) КАТО 'Бъдеща година';

Резултат:

+----------------+--------------+| Текуща година | Бъдеща година ||----------------+--------------|| 2018 г. | 2028 |+----------------+--------------+

И както споменахме също, ако форматирате датата, тя ще бъде върната в типа данни за приложимата функция. Така че в този пример резултатът се връща като int . Ако го форматирахме с FORMAT() функция, той ще бъде върнат като низ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте FILE_IDEX(), за да върнете идентификатора на файл с база данни в SQL Server

  2. SQL сървърът избира отделни редове, използвайки само най-новата стойност

  3. Как да сериализирам голяма графика на .NET обект в SQL Server BLOB, без да създавам голям буфер?

  4. Вземете ROWS като КОЛОНИ (динамична PIVOT заявка на SQL Server)

  5. Как да разделите прозореца на заявката в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 13