Функции по работе с датами и временем

Последнее обновление: 29.07.2017

T-SQL предоставляет ряд функций для работы с датами и временем:

  • GETDATE: возвращает текущую локальную дату и время на основе системных часов в виде объекта datetime

    SELECT GETDATE()	-- 2017-07-28 21:34:55.830
  • GETUTCDATE: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime

    SELECT GETUTCDATE()		-- 2017-07-28 18:34:55.830
  • SYSDATETIME: возвращает текущую локальную дату и время на основе системных часов, но отличие от GETDATE состоит в том, что дата и время возвращаются в виде объекта datetime2

    SELECT SYSDATETIME()		-- 2017-07-28 21:02:22.7446744
  • SYSUTCDATETIME: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime2

    SELECT SYSUTCDATETIME()		-- 2017-07-28 18:20:27.5202777
  • SYSDATETIMEOFFSET: возвращает объект datetimeoffset(7), который содержит дату и время относительно GMT

    SELECT SYSDATETIMEOFFSET()		-- 2017-07-28 21:02:22.7446744 +03:00
  • DAY: возвращает день даты, который передается в качестве параметра

    SELECT DAY(GETDATE())		-- 28
  • MONTH: возвращает месяц даты

    SELECT MONTH(GETDATE())		-- 7
  • YEAR: возвращает год из даты

    SELECT YEAR(GETDATE())		-- 2017
  • DATENAME: возвращает часть даты в виде строки. Параметр выбора части даты передается в качестве первого параметра, а сама дата передается в качестве второго параметра:

    SELECT DATENAME(month, GETDATE())		-- July

    Для определения части даты можно использовать следующие параметры (в скобках указаны их сокращенные версии):

    • year (yy, yyyy): год

    • quarter (qq, q): квартал

    • month (mm, m): месяц

    • dayofyear (dy, y): день года

    • day (dd, d): день месяца

    • week (wk, ww): неделя

    • weekday (dw): день недели

    • hour (hh): час

    • minute (mi, n): минута

    • second (ss, s): секунда

    • millisecond (ms): миллисекунда

    • microsecond (mcs): микросекунда

    • nanosecond (ns): наносекунда

    • tzoffset (tz): смешение в минутах относительно гринвича (для объекта datetimeoffset)

  • DATEPART: возвращает часть даты в виде числа. Параметр выбора части даты передается в качестве первого параметра (используются те же параметры, что и для DATENAME), а сама дата передается в качестве второго параметра:

    SELECT DATEPART(month, GETDATE())		-- 7
  • DATEADD: возвращает дату, которая является результатом сложения числа к определенному компоненту даты. Первый параметр представляет компонент даты, описанный выше для функции DATENAME. Второй параметр - добавляемое количество. Третий параметр - сама дата, к которой надо сделать прибавление:

    SELECT DATEADD(month, 2, '2017-7-28')		-- 2017-09-28 00:00:00.000
    SELECT DATEADD(day, 5, '2017-7-28')		-- 2017-08-02 00:00:00.000
    SELECT DATEADD(day, -5, '2017-7-28')		-- 2017-07-23 00:00:00.000
    

    Если добавляемое количество представляет отрицательное число, то фактически происходит уменьшение даты.

  • DATEDIFF: возвращает разницу между двумя датами. Первый параметр - компонент даты, который указывает, в каких единицах стоит измерять разницу. Второй и третий параметры - сравниваемые даты:

    SELECT DATEDIFF(year, '2017-7-28', '2018-9-28')		-- разница 1 год
    SELECT DATEDIFF(month, '2017-7-28', '2018-9-28')	-- разница 14 месяцев
    SELECT DATEDIFF(day, '2017-7-28', '2018-9-28')		-- разница 427 дней
    
  • TODATETIMEOFFSET: возвращает значение datetimeoffset, которое является результатом сложения временного смещения с объектом datetime2

    SELECT TODATETIMEOFFSET('2017-7-28 01:10:22', '+03:00')
    
  • SWITCHOFFSET: возвращает значение datetimeoffset, которое является результатом сложения временного смещения с другим объектом datetimeoffset

    SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), '+02:30')
  • EOMONTH: возвращает дату последнего дня для месяца, который используется в переданной в качестве параметра дате.

    SELECT EOMONTH('2017-02-05')	-- 2017-02-28
    SELECT EOMONTH('2017-02-05', 3)	-- 2017-05-31
    

    В качестве необязательного второго параметра можно передавать количество месяцев, которые необходимо прибавить к дате. Тогда последний день месяца будет вычисляться для новой даты.

  • DATEFROMPARTS: по году, месяцу и дню создает дату

    SELECT DATEFROMPARTS(2017, 7, 28)		-- 2017-07-28
  • ISDATE: проверяет, является ли выражение датой. Если является, то возвращает 1, иначе возвращает 0.

    SELECT ISDATE('2017-07-28')		-- 1
    SELECT ISDATE('2017-28-07')		-- 0
    SELECT ISDATE('28-07-2017')		-- 0
    SELECT ISDATE('SQL')			-- 0
    

В качестве примера использования функций можно привести создание таблицы заказов, которая содержит дату заказа:

CREATE TABLE Orders
(
    Id INT IDENTITY PRIMARY KEY,
    ProductId INT NOT NULL,
    CustomerId INT NOT NULL,
    CreatedAt DATE NOT NULL DEFAULT GETDATE(),
    ProductCount INT DEFAULT 1,
    Price MONEY NOT NULL
);

Выражение DEFAULT GETDATE() указывает, что если при добавлении данных не передается дата, то она автоматически вычисляется с помощью функции GETDATE().

Другой пример - найдем заказы, которые были сделаны 16 дней назад:

SELECT * FROM Orders
WHERE DATEDIFF(day, CreatedAt, GETDATE()) = 16
Функции для работы с датами и временем в T-SQL и MS SQL Server
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850