Получить дату за месяц до, и это всегда последний день месяца - PullRequest
1 голос
/ 26 августа 2011

В моей базе данных есть столбец «Дата транзакции» с типом данных datetime.Например, «2011-05-31 00: 00: 00.000».Я хотел бы создать SQL-запрос, выбрав данные, в которых дата столбца «Дата транзакции» должна быть за месяц до @ InputDate.

Я пробовал с ...
DATEADD (MONTH, -1, @ InputDate) и он возвращает '30 -May-2011 ', что не то, что я хочу!
Я хочу, чтобы возвращаемое значение всегда было последним днеммесяц как '31-май-2011'

Ответы [ 5 ]

7 голосов
/ 26 августа 2011

Используйте следующие скрипты:

Последний день предыдущего месяца:

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) LastDay_PreviousMonth

Последний день текущего месяца:

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) LastDay_CurrentMonth

Последний день следующего месяца:

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)) LastDay_NextMonth

Последний день любого месяца и года:

DECLARE @dtDate DATETIME
SET @dtDate = '8/18/2007'
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dtDate)+1,0))
LastDay_AnyMonth
2 голосов
/ 26 августа 2011
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

GETDATE () можно заменить на введенную вами дату

1 голос
/ 26 августа 2011

Последний день того же месяца

SELECT DATEADD(m, DATEDIFF(m, -1, '2011-05-31'), -1)

Последний день прошлого месяца

SELECT DATEADD(m, DATEDIFF(m, 0, '2011-05-31'), -1)
0 голосов
/ 09 марта 2018

Начиная с SQL Server 2012, вы можете использовать встроенную функцию EOMONTH , чтобы получить последний день месяца.

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

SELECT EOMONTH(GETDATE(), -1)

Где вместо GETDATE() вы можете поместить свою дату.

SELECT EOMONTH(@InputDate, -1)
0 голосов
/ 26 августа 2011

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

Если это так, следующие работы (где CURRENT_TIMESTAMP используется в качестве даты для поиска,'20010101' и '20001231' являются константами):

select DATEADD(month,DATEDIFF(month,'20010101',CURRENT_TIMESTAMP),'20001231')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...