使用SQL DataTime改进工作

时间:2015-06-22 19:21:46

标签: sql sql-server database tsql

我的日期有业务。我需要更改日期

对于每个月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 )

但我正在寻找更好的解决方案。

2 个答案:

答案 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个月。