我的日期有业务。我需要更改日期
对于每个月25日之前的每个日期,我希望每月25个月之前和每个月的25个月之后的每个日期我想要获得同月的25个。
示例:
2015/06/24(或2015/06/06)我需要2015/05/25
和2015/06/25(或2015/06/30)我需要2015/06/25
我写这个查询:
DECLARE @A DATE = '2015/06/01'
SELECT
( CASE WHEN DATEDIFF(MONTH, DATEADD(Day, -25, @A), @A) = 0
THEN DATEADD(DAY, 25, DATEADD(Day, -DAY(@A), @A))
ELSE DATEADD(DAY, 25, DATEADD(MONTH, -1, DATEADD(Day, -DAY(@A), @A)))
END )
但我正在寻找更好的解决方案。
答案 0 :(得分:4)
你可以这样做:
SELECT IIF(DAY(@A) >= 25,
DATEADD(d, 25 - DAY(@A), @A),
DATEADD(d, 25, EOMONTH(@A, -2)))
这里还有一个示例小提琴:sqlfiddle
注意:EOMONTH
需要SQL Sever 2012或更高版本 - 它会在给定开始日期和月份偏移量的情况下返回月末日期。
答案 1 :(得分:0)
您应该可以使用单个dateadd语句执行此操作:
SELECT dateadd(dd, 25 - datepart(dd, @A), @A)
Datepart获取当月的当天(1,6,30,无论如何)。
我们减去那个,然后加上25来得到你想要的结果,即25个月。