Очень часто бывает необходимо в аналитических процедурах в MS SQL Server’e “вытащить” первое число месяца. Например, в отчетах месяц можно отображать как первое число этого месяца, что весьма удобно с точки зрения сортировки данных в сводной таблице MS Excel.
В t-SQL можно поступить таким образом:
declare @d datetime = getdate() set @d = dateadd(day, - datepart(day, @d) + 1, convert(date, @d)) select @d
Здесь с помощью встроенной функции dateadd от переменной @d вычитается количество дней равное дате в исходном месяце (получается последняя дата предыдущего месяца) и прибавляется один день, чтобы получить первое число исходного месяца. Для того, чтобы избавиться от “лишнего” времени применяем функцию convert, где преобразуем переменную @d к типу date (только дата без времени).
Можно даже написать функцию, которая принимает в качестве параметра дату
create function [dbo].[monthStart] (@d datetime) returns datetime as begin return (dateadd(day, - datepart(day, @d) + 1, convert(date, @d))) end
Пример использования функции: