Добавить комментарий

Работа с датами. MS SQL 2005

Сюда складываю полезные функции, "шпаргалки" и другие тонкие моменты при работе с датами на MS SQL Server.

BETWEEN - закрытый интервал, но будьте вимательны со временем в датах...

SELECT *
FROM (
   SELECT '2008-02-03' AS d1
   UNION
   SELECT '2008-02-03 23:59:59' AS d1
   UNION
   SELECT '2008-02-04' AS d1
   UNION
   SELECT '2008-02-04 00:00:01' AS d1
   UNION
   SELECT '2008-02-05' AS d1
   UNION
   SELECT '2008-02-06' AS d1
   UNION
   SELECT '2008-02-06 00:00:01' AS d1
   UNION
   SELECT '2008-02-07' AS d1
) AS T
WHERE T.d1 BETWEEN '2008-02-04' AND '2008-02-06'

Результат:

d1
-------------------
2008-02-04
2008-02-04 00:00:01
2008-02-05
2008-02-06
 
(4 row(s) affected)

Обнулить (очистить) время у даты:

CREATE FUNCTION Utils_TimeToZero(@date_with_time datetime)
RETURNS datetime
AS
BEGIN
   RETURN convert(datetime, (SELECT convert(nvarchar(4), datepart(yyyy, @date_with_time)) +
      + '-' + convert(nvarchar(2), datepart(mm, @date_with_time)) +
      + '-' + convert(nvarchar(2), datepart(dd, @date_with_time))
      + ' 00:00:00'), 121);  /* добавлять 00:00:00 не обязательно */
END