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

SQL предоставляет ряд функций для работы с датами и временем:
- GETDATE: возвращает текущую локальную дату и время на основе системных часов в виде объекта datetime1
SELECTGETDATE()-- 2022-07-28 21:34:55.830 - GETUTCDATE: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime1
SELECTGETUTCDATE()-- 2022-07-28 18:34:55.830 - SYSDATETIME: возвращает текущую локальную дату и время на основе системных часов, но отличие от GETDATE состоит в том, что дата и время возвращаются в виде объекта datetime21
SELECTSYSDATETIME()-- 2022-07-28 21:02:22.7446744 - SYSUTCDATETIME: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime21
SELECTSYSUTCDATETIME()-- 2022-07-28 18:20:27.5202777 - SYSDATETIMEOFFSET: возвращает объект datetimeoffset(7), который содержит дату и время относительно GMT1
SELECTSYSDATETIMEOFFSET()-- 2022-07-28 21:02:22.7446744 +03:00 - DAY: возвращает день даты, который передается в качестве параметра1
SELECTDAY(GETDATE())-- 28 - MONTH: возвращает месяц даты1
SELECTMONTH(GETDATE())-- 7 - YEAR: возвращает год из даты1
SELECTYEAR(GETDATE())-- 2022 - DATENAME: возвращает часть даты в виде строки. Параметр выбора части даты передается в качестве первого параметра, а сама дата передается в качестве второго параметра:1
SELECTDATENAME(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), а сама дата передается в качестве второго параметра:1
SELECTDATEPART(month, GETDATE())-- 7 - DATEADD: возвращает дату, которая является результатом сложения числа к определенному компоненту даты. Первый параметр представляет компонент даты, описанный выше для функции DATENAME. Второй параметр – добавляемое количество. Третий параметр – сама дата, к которой надо сделать прибавление:123
SELECTDATEADD(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: возвращает разницу между двумя датами. Первый параметр – компонент даты, который указывает, в каких единицах стоит измерять разницу. Второй и третий параметры – сравниваемые даты:123
SELECTDATEDIFF(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, которое является результатом сложения временного смещения с другим объектом datetimeoffset1
SELECTTODATETIMEOFFSET('2022-7-28 01:10:22','+03:00') - SWITCHOFFSET: возвращает значение datetimeoffset, которое является результатом сложения временного смещения с объектом datetime21
SELECTSWITCHOFFSET(SYSDATETIMEOFFSET(),'+02:30') - EOMONTH: возвращает дату последнего дня для месяца, который используется в переданной в качестве параметра дате.12
SELECTEOMONTH('2022-02-05')-- 2022-02-28SELECTEOMONTH('2022-02-05', 3)-- 2022-05-31В качестве необязательного второго параметра можно передавать количество месяцев, которые необходимо прибавить к дате. Тогда последний день месяца будет вычисляться для новой даты. - DATEFROMPARTS: по году, месяцу и дню создает дату1
SELECTDATEFROMPARTS(2022, 7, 28)-- 2022-07-28 - ISDATE: проверяет, является ли выражение датой. Если является, то возвращает 1, иначе возвращает 0.1234
SELECTISDATE('2022-07-28')-- 1SELECTISDATE('2022-28-07')-- 0SELECTISDATE('28-07-2022')-- 0SELECTISDATE('SQL')-- 0
В качестве примера использования функций можно привести создание таблицы заказов, которая содержит дату заказа:
| 123456789 | CREATETABLEOrders( Id INTIDENTITY PRIMARYKEY, ProductId INTNOTNULL, CustomerId INTNOTNULL, CreatedAt DATENOTNULLDEFAULTGETDATE(), ProductCount INTDEFAULT1, Price MONEY NOTNULL); |
Выражение DEFAULT GETDATE() указывает, что если при добавлении данных не передается дата, то она автоматически вычисляется с помощью функции GETDATE().
Другой пример – найдем заказы, которые были сделаны 16 дней назад:
| 12 | SELECT* FROMOrdersWHEREDATEDIFF(day, CreatedAt, GETDATE()) = 16 |
https://t.me/sqlhub – sql с нуля до профи Функции по работе с датами и временем
+1
+1
+1
1
+1
+1



