Author Archives: Ruslan Yunusov

Как получить начало квартала в SQL?

Начало квартала в MS SQL Server’е можно получить следующим образом:

declare @d datetime = getdate()
set @d = dateadd(qq, datediff(qq, 0, @d), 0)
select @date

Здесь используется то, что функция datediff возвращает разницу в кварталах между “началом времен” в SQL и искомой датой. Затем к этому “началу времен” прибавляется разница в кварталах и получается начало квартала от нужной даты @date.
Функция будет иметь вид:

create function [dbo].[quarterStart]
(@d datetime)
returns datetime
as
begin
return (dateadd(qq, datediff(qq, 0, @d), 0))
end

Пример использования функции:
=Пример использования функции quarterStart

Как получить первое число месяца в SQL?

Очень часто бывает необходимо в аналитических процедурах в 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

Пример использования функции:
Пример использования функции monthStart