T-SQL предоставляет ряд функций для работы с датами и временем:
- GETDATE: возвращает текущую локальную дату и время на основе системных часов в виде объекта datetime1
SELECT
GETDATE()
-- 2017-07-28 21:34:55.830
GETUTCDATE: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime
1
| SELECT GETUTCDATE() -- 2017-07-28 18:34:55.830 |
SYSDATETIME: возвращает текущую локальную дату и время на основе системных часов, но отличие от GETDATE состоит в том, что дата и время возвращаются в виде объекта datetime2
1
| SELECT SYSDATETIME() -- 2017-07-28 21:02:22.7446744 |
SYSUTCDATETIME: возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime2
1
| SELECT SYSUTCDATETIME() -- 2017-07-28 18:20:27.5202777 |
SYSDATETIMEOFFSET: возвращает объект datetimeoffset(7), который содержит дату и время относительно GMT
1
| SELECT SYSDATETIMEOFFSET() -- 2017-07-28 21:02:22.7446744 +03:00 |
DAY: возвращает день даты, который передается в качестве параметра
1
| SELECT DAY (GETDATE()) -- 28 |
MONTH: возвращает месяц даты
1
| SELECT MONTH (GETDATE()) -- 7 |
YEAR: возвращает год из даты
1
| SELECT YEAR (GETDATE()) -- 2017 |
DATENAME: возвращает часть даты в виде строки. Параметр выбора части даты передается в качестве первого параметра, а сама дата передается в качестве второго параметра:
1
| 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), а сама дата передается в качестве второго параметра:
1
| SELECT DATEPART( month , GETDATE()) -- 7 |
DATEADD: возвращает дату, которая является результатом сложения числа к определенному компоненту даты. Первый параметр представляет компонент даты, описанный выше для функции DATENAME. Второй параметр - добавляемое количество. Третий параметр - сама дата, к которой надо сделать прибавление:
1
2
3
| 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: возвращает разницу между двумя датами. Первый параметр - компонент даты, который указывает, в каких единицах стоит измерять разницу. Второй и третий параметры - сравниваемые даты:
1
2
3
| 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, которое является результатом сложения временного смещения с другим объектом datetimeoffset
1
| SELECT TODATETIMEOFFSET( '2017-7-28 01:10:22' , '+03:00' ) |
SWITCHOFFSET: возвращает значение datetimeoffset, которое является результатом сложения временного смещения с объектом datetime2
1
| SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), '+02:30' ) |
EOMONTH: возвращает дату последнего дня для месяца, который используется в переданной в качестве параметра дате.
1
2
| SELECT EOMONTH( '2017-02-05' ) -- 2017-02-28 SELECT EOMONTH( '2017-02-05' , 3) -- 2017-05-31 |
В качестве необязательного второго параметра можно передавать количество месяцев, которые необходимо прибавить к дате. Тогда последний день месяца будет вычисляться для новой даты.
DATEFROMPARTS: по году, месяцу и дню создает дату
1
| SELECT DATEFROMPARTS(2017, 7, 28) -- 2017-07-28 |
ISDATE: проверяет, является ли выражение датой. Если является, то возвращает 1, иначе возвращает 0.
1
2
3
4
| SELECT ISDATE( '2017-07-28' ) -- 1 SELECT ISDATE( '2017-28-07' ) -- 0 SELECT ISDATE( '28-07-2017' ) -- 0 SELECT ISDATE( 'SQL' ) -- 0 |
В качестве примера использования функций можно привести создание таблицы заказов, которая содержит дату заказа:
1
2
3
4
5
6
7
8
9
| 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 дней назад:
1
2
| SELECT * FROM Orders WHERE DATEDIFF( day , CreatedAt, GETDATE()) = 16 |
Комментариев нет:
Отправить комментарий