在我的数据库中,我有一个列,'Transaction Date'和datetime数据类型。例如,'2011-05-31 00:00:00.000'。 我想通过选择数据来创建SQL查询,其中“交易日期”列日期是@InputDate之前的一个月。
我试过了......
DATEADD(月,-1,@ InputDate),它返回 '30 -May-2011',这不是我想要的!
我希望价值回报永远是一个月的最后一天,如 '31 -May-2011'
答案 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)