Последний день месяца sql

Конкретно MSSQL 2005.

9 ответов

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Вот решение, которое дает вам последнюю секунду текущего месяца. Вы можете извлечь часть даты или изменить ее, чтобы вернуть только день. Я проверил это на SQL Server 2005.

Чтобы понять, как это работает, нужно взглянуть на dateAdd() а также dateDiff() функции.

Если вы выполните только самый внутренний вызов функции datediff(), вы получите номер текущего месяца с отметкой времени 0.

Следующая часть добавляет это число месяцев плюс 1 к отметке времени 0, давая вам отправную точку следующего календарного месяца.

Наконец, внешняя dateadd() просто вычитает одну секунду из начальной отметки времени следующего месяца, давая вам последнюю секунду текущего месяца.

Этот старый ответ (ниже) содержит ошибку, из-за которой он не работает в последний день месяца, в котором больше дней, чем в следующем месяце. Я оставляю это здесь как предупреждение для других.

Добавьте один месяц к текущей дате, а затем вычтите значение, возвращенное функцией DAY, примененной к текущей дате, используя функции DAY и DATEADD.

Общий подход: использовать временную функциональность.

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

Это разница в полных месяцах между первым днем ​​отчетного месяца и текущей отметкой времени. Давайте назовем это @calc .

Это добавляет @calc гранулы месяца до последнего дня отчетного месяца, результатом которого является текущая временная метка, «округленная» до последнего дня его месяца. Q.E. D.

Читайте также  Почему гудят провода лэп

Они являются ключевыми, если вы можете получить первый день текущего месяца, последний день прошлого месяца и последний день текущего месяца.

Ниже приведен пошаговый способ написания запроса:

В SQL Server дата начинается с 1901/01/01 (дата 0) и по сей день каждый месяц может быть идентифицирован числом. 12-й месяц первый месяц 1902 года означает январь. Месяц 1200 — январь 2001 года. Аналогичным образом каждому дню можно присвоить уникальный номер, например, дата 0 — 1901/01/01. Дата 31 — 1901/02/01, а январь 1901 года начинается с 0.

Чтобы узнать первый день текущего месяца (текущая дата или данная дата)

  1. Сначала нам нужно проверить, сколько месяцев прошло с даты 0 (1901/01/01). ВЫБЕРИТЕ DATEDIFF (MM, 0, GETDATE())
  2. Добавить то же число месяца к дате 0 (1901/01/01)

SELECT DATEADD (MM, DATEDIFF (MM, 0, GETDATE()), 0)

Тогда мы получим первый день текущего месяца (текущая дата или заданная дата)

Чтобы получить последний день прошлого месяца

Нам нужно вычесть секунду из первого дня текущего месяца

SELECT DATEADD (SS, -1, DATEADD (MM, DATEDIFF (MM, 0, GETDATE()), 0))

Чтобы получить последний день текущего месяца

Чтобы получить первый день текущего месяца, сначала мы проверили, сколько месяцев прошло с даты 0 (1901/01/01). Если мы добавим еще один месяц с общим количеством месяцев с даты 0, а затем добавим общее количество месяцев с датой 0, мы получим первый день следующего месяца.

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

SELECT DATEADD (SS, -1, DATEADD (MM, DATEDIFF (MM, 0, GETDATE()) + 1,0))

Надеюсь, это поможет.

Используя SQL2005, у вас нет доступа к полезной функции EOMONTH() , Таким образом, вы должны рассчитать это самостоятельно.

Эта простая функция будет работать как EOMONTH

Запрос на выполнение:

Читайте также  Скрипт комментариев для сайта html

Для полноты, в Oracle вы бы сделали что-то вроде.

Мне нужно получить последний день месяца, указанный в качестве даты в SQL. Если у меня есть первый день месяца, я могу сделать что-то вроде этого:

Но кто-нибудь знает, как его обобщить, чтобы я мог найти последний день месяца для любой даты?

Вот моя версия. Никаких строковых манипуляций или кастинга не требуется, только один вызов каждого из функций DATEADD , YEAR и MONTH :

С SQL Server 2012 вы можете использовать функцию EOMONTH.

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

Как. Я могу найти последний день месяца для любой даты?

Вы можете получить дни в день, используя функцию DAY():

Я знаю, что это старый вопрос, но вот другое решение, которое работает для меня

Надеюсь, это поможет кому-то другому. Скалы утесов.

На основе утверждений:

как насчет добавления месяца к дате @x, а затем получения последнего дня месяца, предшествующего этому (т.е. последний день месяца предоставленной даты)

Примечание. Это был тест с использованием SQL Server 2008 R2

Немного растяните свою формулу:

SQL-запрос для отображения даты окончания текущего месяца

SQL-запрос для отображения даты окончания следующего месяца

Попробуйте выполнить следующий запрос, он предоставит вам все, что вы хотите:)

WinSQL: я хотел вернуть все записи за последний месяц:

Это делает то же самое:

Используя SQL Server, вот еще один способ найти последний день месяца:

WinSQL, чтобы получить последний день прошлого месяца (т.е. сегодня 2017-02-09, возвращает 2017-01-31: Выберите дату (день, день (сегодня()), сегодня())

Работает на SQL-сервере

Я написал следующую функцию, она работает.

Он возвращает тип данных datetime. Нулевой час, минута, секунда, милисекунды.

Читайте также  Самсунг трейд ин 2018 условия

Он очень прост в использовании. Пример 2:

Если вам это нужно часто, оберните его в встроенный TVF, который очень быстрый:

Возьмите некоторую базовую дату, которая составляет 31-е число месяца, например. ‘20011231’. Затем используйте следующая процедура (я привел 3 одинаковых примера ниже, только значение @dt отличается).

используя SQL Server 2005, это работает для меня:

В основном вы получаете количество месяцев с начала (SQL Server) для YOUR_DATE. Затем добавьте один к нему, чтобы получить порядковый номер следующего месяца. Затем вы добавляете это количество месяцев в 0, чтобы получить дату, которая является первым днем ​​следующего месяца. Из этого вы затем вычитаете день, чтобы добраться до последнего дня YOUR_DATE.

Это работает для меня, используя Microsoft SQL Server 2005:

Базы данных

В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию LAST_DAY с синтаксисом и примерами.

Описание

Oracle/PLSQL функция LAST_DAY возвращает последний день месяца на основе значения даты.

Синтаксис

Синтаксис Oracle/PLSQL функции LAST_DAY:

Параметры или аргументы

date значение даты, используется для расчета последнего дня месяца.

Функция LAST_DAY возвращает значение date.

Применение

Функцию LAST_DAY можно использовать в следующих версиях Oracle/PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Пример

Рассмотрим несколько примеров функции LAST_DAY и изучим, как использовать функцию LAST_DAY в Oracle/PLSQL.

Ссылка на основную публикацию
Adblock
detector