loading..
Русский    English
16:47
листать

Функция EOMONTH

Как узнать последний день месяца по заданной дате, например, текущего месяца?

Текущую дату мы можем узнать, используя встроенную функцию current_timestamp:

Консоль
Выполнить
  1. SELECT current_timestamp;

Чтобы узнать последний день предыдущего месяца, мы можем от текущей даты отнять номер текущего дня месяца, т.е. количество дней, прошедших от начала месяца:

Консоль
Выполнить
  1. SELECT dateadd(dd, -day(current_timestamp), current_timestamp);

Тогда для текущего месяца нам потребуется предварительно добавить один месяц к текущей дате:

Консоль
Выполнить
  1. SELECT dateadd(dd, -day(dateadd(mm, 1, current_timestamp)),
  2. dateadd(mm, 1, current_timestamp));

Уберем, наконец, из полученного результата компоненту времени:

Консоль
Выполнить
  1. SELECT CAST(
  2. dateadd(dd, -day(dateadd(mm, 1, current_timestamp)), dateadd(mm, 1, current_timestamp))
  3. AS date);

В  Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2012 появилась функция EOMONTH, которая позволяет сделать то же самое без применения "процедурной" логики:

Консоль
Выполнить
  1. SELECT CAST(
  2. dateadd(dd, -day(dateadd(mm, 1, current_timestamp)),
  3. dateadd(mm, 1, current_timestamp)) AS date
  4. ) old_way, eomonth(current_timestamp) new_way;

Если вы получаете ошибку при выполнении последнего запроса, значит учебник еще не переехал на версию SQL Server, поддерживающую EOMONTH.

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

old_way    new_way
2016-07-31    2016-07-31

Мы уже знаем, что функция EOMONTH имеет аргументом выражение типа даты. Кроме того, функция имеет также второй (необязательный) целочисленный аргумент, представляющий число месяцев, которые, при наличии, будут добавлены к дате, представленной первым аргументом. Например, следующий запрос даст нам последние дни предыдущего, текущего и следующего месяца для даты '2016-01-28':

Консоль
Выполнить
  1. SELECT eomonth('2016-01-28',-1) prev_month,
  2.                    eomonth('2016-01-28') this_month,
  3.                    eomonth('2016-01-28', 1) next_month;

prev_month    this_month    next_month
2015-12-31    2016-01-31    2016-02-29

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.