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

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

  • GETDATE: возвращает текущую локальную дату и время на основе системных часов в виде объекта datetime1SELECTGETDATE()    -- 2022-07-28 21:34:55.830
  • GETUTCDATE: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime1SELECTGETUTCDATE()     -- 2022-07-28 18:34:55.830
  • SYSDATETIME: возвращает текущую локальную дату и время на основе системных часов, но отличие от GETDATE состоит в том, что дата и время возвращаются в виде объекта datetime21SELECTSYSDATETIME()        -- 2022-07-28 21:02:22.7446744
  • SYSUTCDATETIME: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime21SELECTSYSUTCDATETIME()     -- 2022-07-28 18:20:27.5202777
  • SYSDATETIMEOFFSET: возвращает объект datetimeoffset(7), который содержит дату и время относительно GMT1SELECTSYSDATETIMEOFFSET()      -- 2022-07-28 21:02:22.7446744 +03:00
  • DAY: возвращает день даты, который передается в качестве параметра1SELECTDAY(GETDATE())       -- 28
  • MONTH: возвращает месяц даты1SELECTMONTH(GETDATE())     -- 7
  • YEAR: возвращает год из даты1SELECTYEAR(GETDATE())      -- 2022
  • DATENAME: возвращает часть даты в виде строки. Параметр выбора части даты передается в качестве первого параметра, а сама дата передается в качестве второго параметра:1SELECTDATENAME(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), а сама дата передается в качестве второго параметра:1SELECTDATEPART(month, GETDATE())       -- 7
  • DATEADD: возвращает дату, которая является результатом сложения числа к определенному компоненту даты. Первый параметр представляет компонент даты, описанный выше для функции DATENAME. Второй параметр – добавляемое количество. Третий параметр – сама дата, к которой надо сделать прибавление:123SELECTDATEADD(month, 2, '2022-7-28')       -- 2022-09-28 00:00:00.000SELECTDATEADD(day, 5, '2022-7-28')     -- 2022-08-02 00:00:00.000SELECTDATEADD(day, -5, '2022-7-28')        -- 2022-07-23 00:00:00.000Если добавляемое количество представляет отрицательное число, то фактически происходит уменьшение даты.
  • DATEDIFF: возвращает разницу между двумя датами. Первый параметр – компонент даты, который указывает, в каких единицах стоит измерять разницу. Второй и третий параметры – сравниваемые даты:123SELECTDATEDIFF(year, '2022-7-28', '2018-9-28')     -- разница 1 годSELECTDATEDIFF(month, '2022-7-28', '2018-9-28')    -- разница 14 месяцевSELECTDATEDIFF(day, '2022-7-28', '2018-9-28')      -- разница 427 дней
  • TODATETIMEOFFSET: возвращает значение datetimeoffset, которое является результатом сложения временного смещения с другим объектом datetimeoffset1SELECTTODATETIMEOFFSET('2022-7-28 01:10:22', '+03:00')
  • SWITCHOFFSET: возвращает значение datetimeoffset, которое является результатом сложения временного смещения с объектом datetime21SELECTSWITCHOFFSET(SYSDATETIMEOFFSET(), '+02:30')
  • EOMONTH: возвращает дату последнего дня для месяца, который используется в переданной в качестве параметра дате.12SELECTEOMONTH('2022-02-05')    -- 2022-02-28SELECTEOMONTH('2022-02-05', 3) -- 2022-05-31В качестве необязательного второго параметра можно передавать количество месяцев, которые необходимо прибавить к дате. Тогда последний день месяца будет вычисляться для новой даты.
  • DATEFROMPARTS: по году, месяцу и дню создает дату1SELECTDATEFROMPARTS(2022, 7, 28)       -- 2022-07-28
  • ISDATE: проверяет, является ли выражение датой. Если является, то возвращает 1, иначе возвращает 0.1234SELECTISDATE('2022-07-28')     -- 1SELECTISDATE('2022-28-07')     -- 0SELECTISDATE('28-07-2022')     -- 0SELECTISDATE('SQL')            -- 0

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

123456789CREATETABLEOrders(    Id INTIDENTITY PRIMARYKEY,    ProductId INTNOTNULL,    CustomerId INTNOTNULL,    CreatedAt DATENOTNULLDEFAULTGETDATE(),    ProductCount INTDEFAULT1,    Price MONEY NOTNULL);

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

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

12SELECT* FROMOrdersWHEREDATEDIFF(day, CreatedAt, GETDATE()) = 16

https://t.me/sqlhub – sql с нуля до профи Функции по работе с датами и временем

источник

Ответить