SQL. Как работать с датами в SQL Server

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
10,392
Реакции
1,597
Credits
38,052
SQL. Как работать с датами в SQL Server

Из строки в дату и обратно
Приведение строки к дате
SQL:
-- формат dd.mm.yyyy
select try_convert(date, isnull(@fielddateBirth,'01.01.1980'), 104)
SQL:
-- формат yyyy-mm-dd
select try_convert(date, isnull(@fielddateBirth,'1980-01-01'), 23)

Приведение даты к строке
SQL:
-- формат dd.MM.yyyy
select try_convert(nvarchar(16), getdate(), 104)
SQL:
-- формат yyyy-mm-dd
select convert(nvarchar, isnull(dateBirth,'1900-01-01'), 23)

Приведение даты к строке в заданном формате:
SQL:
select format(getdate(), 'dd.MM.yyyy HH:mm')

Полезные функции по работе с датами
SQL:
select getdate() -- получить текущую дату

select dateadd(day, 7, getdate()) -- добавить 7 дней к дате

select dateadd(month, -2, getdate()) -- отнять 2 месяца от даты

select datediff(minute, date1, date2) -- получить разницу в минутах между date2 и date1

SELECT DAY(GETDATE())       -- 28  получить день даты (аналогично month, year, week)

SELECT DATENAME(month, GETDATE())       -- July получить название месяца

SELECT DATEPART(month, GETDATE())       -- 7 получить часть даты (например, месяц, год или день)

SELECT DATEFROMPARTS(2017, 7, 28)       -- 2017-07-28  строит дату из частей

SELECT ISDATE('2017-07-28')     -- 1 - проверка является ли строка датой

Полезные вычисления по датам (типовые задачи)
SQL:
-- начало и конец недели
SET DATEFIRST 4   /* or use any other weird value to test it */
DECLARE @d DATETIME = GETDATE()
SELECT
  @d ThatDate,
  cast( DATEADD(dd, 0 - (@@DATEFIRST + 5 + DATEPART(dw, @d)) % 7, @d) as date) Monday,
  cast(DATEADD(dd, 6 - (@@DATEFIRST + 5 + DATEPART(dw, @d)) % 7, @d) as date) Sunday


-- начало месяца
SELECT DATEADD(month, DATEDIFF(month, 0, @d), 0) AS StartOfMonth

-- номер недели в году
set datefirst 1;
select datepart(week, '2017-02-01');

-- получение дня недели
select datename(dw,getdate()) --Thursday
select datepart(dw,getdate()) --2