Как получить первое число месяца в sql
Перейти к содержимому

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

  • автор:

Первый и последний день месяца в PL/SQL

Недавно наткнулся на необходимость написать запрос на PL/SQL, который выводил бы все записи за текущий месяц, причем захватываю пару дней до начала месяца и пару дней после его окончания. Например, с 29.04 по 02.06.

Оказалось, что в PL/SQL есть функция LAST_DAY ( DATE ). Она выдает последний день месяца переданной ей даты. Но почему-то нет функции FIRST_DAY ( DATE ) — получения первого дня месяца. Ее роль выполняет вот такое выражение:

TO_DATE ( TRUNC ( DATE, 'MM' ), 'DD.MM.YYYY' )

Казалось бы, почему не сделать функцию FIRST_DAY?

  • первый день месяца: TO_DATE ( TRUNC ( DATE, ’MM’ ), ’DD.MM.YYYY’ );
  • последний день месяца: LAST_DAY ( DATE ).

А условие запроса с двумя днями соответственно выглядит вот так:

. AND a.request_date BETWEEN ( TO_DATE ( TRUNC ( SYSDATE, 'MM' ), 'DD.MM.YYYY' ) - 2 ) AND ( LAST_DAY ( SYSDATE ) + 2 )

MONTH (Transact-SQL)

Возвращает целое число, представляющее месяц указанной даты date.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).

Синтаксис

MONTH ( date ) 

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

date
Выражение, которое можно привести к значению типа time, date, smalldatetime, datetime, datetime2 или datetimeoffset. Аргумент date может быть выражением, выражением столбца, определяемой пользователем переменной или строковым литералом.

Тип возвращаемых данных

int

Возвращаемое значение

Функция MONTH возвращает то же значение, что и функция DATEPART (month, date).

Если дата date содержит только компонент времени, возвращаемое значение равно 1, базовому месяцу.

Примеры

Следующая инструкция возвращает значение 4 . Порядковый номер месяца.

SELECT MONTH('2007-04-30T01:01:01.1234567 -07:00'); 

Следующая инструкция возвращает значение 1900, 1, 1 . В качестве значения аргумента date задается число 0 . SQL Server интерпретирует 0 как 1 января 1900 г.

SELECT YEAR(0), MONTH(0), DAY(0); 

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

В приведенном ниже примере возвращается 4 . Порядковый номер месяца.

-- Uses AdventureWorks SELECT TOP 1 MONTH('2007-04-30T01:01:01.1234') FROM dbo.DimCustomer; 

В приведенном ниже примере возвращается 1900, 1, 1 . В качестве значения аргумента date задается число 0 . SQL Server интерпретирует 0 как 1 января 1900 г.

-- Uses AdventureWorks SELECT TOP 1 YEAR(0), MONTH(0), DAY(0) FROM dbo.DimCustomer; 

EOMONTH (Transact-SQL)

Эта функция возвращает последний день месяца, содержащего указанную дату, с необязательным смещением.

Синтаксис

EOMONTH ( start_date [, month_to_add ] ) 

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

start_date
Выражение даты, задающее дату, для которой необходимо возвратить последний день месяца.

month_to_add
Необязательное целочисленное выражение, задающее количество месяцев, добавляемых к параметру start_date.

Если аргумент month_to_add имеет значение, то EOMONTH добавляет указанное число месяцев к значению start_date и возвращает последний день месяца, соответствующего полученной дате. Если при таком сложении происходит выход за пределы допустимого диапазона дат, функция EOMONTH вызывает ошибку.

Тип возвращаемых данных

date

Remarks

Функция EOMONTH поддерживает удаленное взаимодействие с серверами SQL Server 2012 (11.x) и более поздних версий. Она не может быть удаленной для серверов с версией ниже SQL Server 2012 (11.x).

Примеры

A. EOMONTH с явным типом datetime

DECLARE @date DATETIME = '12/1/2011'; SELECT EOMONTH ( @date ) AS Result; GO 
Result ------------ 2011-12-31 (1 row(s) affected) 

Б. EOMONTH со строковым параметром и неявным преобразованием

DECLARE @date VARCHAR(255) = '12/1/2011'; SELECT EOMONTH ( @date ) AS Result; GO 
Result ------------ 2011-12-31 (1 row(s) affected) 

В. Функция EOMONTH с параметром month_to_add и без него

Значения в этих результирующих наборах отражают дату выполнения между 12/01/2011 и 12/31/2011 (включительно).

DECLARE @date DATETIME = GETDATE(); SELECT EOMONTH ( @date ) AS 'This Month'; SELECT EOMONTH ( @date, 1 ) AS 'Next Month'; SELECT EOMONTH ( @date, -1 ) AS 'Last Month'; GO 
This Month ----------------------- 2011-12-31 (1 row(s) affected) Next Month ----------------------- 2012-01-31 (1 row(s) affected) Last Month ----------------------- 2011-11-30 (1 row(s) affected) 

Обратная связь

Были ли сведения на этой странице полезными?

Пользовательские функции и процедуры MS SQL

MS SQL user function, procedures – Пользовательские функции и процедуры MS SQL.

Как получить первое число месяца в 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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *