Начало месяца из даты в MS SQL (противоположность функции EOMONTH)
Иногда из таблицы MS SQL нужно выбрать значения, сгруппированные по месяцам. Пожалуй, проще всего вызвать DateAdd с DateDiff:
SELECT Sum(YourColumn), DATEADD(month, DATEDIFF(month, 0, [YourDateColumn]), 0) as 'Date'
FROM YourTable
GROUP BY DATEADD(month, DATEDIFF(month, 0, [YourDateColumn]), 0);
Или взять функцию EOMONTH — она возвращает последний день месяца:
SELECT Sum(YourColumn), EOMONTH([YourDateColumn]) as 'Date'
FROM YourTable
GROUP BY EOMONTH([YourDateColumn]) ;
Но обычно удобнее первый день месяца. Чтобы сэкономить время и сделать скрипт понятнее, напишите свою функцию по образцу EOMONTH:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[SOMONTH] (@dd datetime)
RETURNS date
AS
BEGIN
declare @YYYY_MM_DD datetime;
SET @YYYY_MM_DD = DATEADD(month, DATEDIFF(month, 0, @dd), 0);
return @YYYY_MM_DD
END
И вызовите её:
SELECT Sum(YourColumn), SOMONTH([YourDateColumn]) as 'Date'
FROM YourTable
GROUP BY SOMONTH([YourDateColumn]) ;
Консультирую по продукту, собираю MVP и учу делать продукты самостоятельно. Поработать со мной →