获取一个月前的日期,它始终是该月的最后一天

时间:2011-08-26 06:43:56

标签: sql-server tsql

在我的数据库中,我有一个列,'Transaction Date'和datetime数据类型。例如,'2011-05-31 00:00:00.000'。 我想通过选择数据来创建SQL查询,其中“交易日期”列日期是@InputDate之前的一个月。

我试过了......
DATEADD(月,-1,@ InputDate),它返回 '30 -May-2011',这不是我想要的!
我希望价值回报永远是一个月的最后一天,如 '31 -May-2011'

5 个答案:

答案 0 :(得分:7)

使用以下脚本:

上个月的最后一天:

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

答案 1 :(得分:2)

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

GETDATE()可以替换为输入日期

答案 2 :(得分:1)

同月的最后一天

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

上个月的最后一天

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

答案 3 :(得分:0)

我想你在上个月的最后一天询问任何日期?

如果是这样,以下工作(CURRENT_TIMESTAMP被用作搜索日期,'20010101''20001231'是常量):

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

这是有效的,因为两个常数日期之间的关系是,与'20010101'相比,'20001231'是前一个月的最后一个日期。

答案 4 :(得分:0)

自SQL Server 2012起,您可以使用EOMONTH内置函数来获取一个月的最后一天。

因此,要获取上个月的最后一天,您可以使用此查询:

SELECT EOMONTH(GETDATE(), -1)

而不是GETDATE(),您可以放置​​日期变量

SELECT EOMONTH(@InputDate, -1)