首页 > 解决方案 > SQL中的增量下个月日期

问题描述

我有类似的要求,我有SQL Server 2012一个月的文件馈送,但我想将相同的文件转换为下个月的文件。

例如我有以下

02/22/2018 02/23/2018 02/24/2018

而且我要03/22/2018 03/23/2018 02/24/2018

我能够做到这一点,但是当我遇到以下情况时会遇到问题。

02/28/2018 02/24/2018

而且我要03/31/2018 03/31/2018

我有一个正常的日历设置,我可以使用有人可以帮忙吗?

标签: sqldatesql-server-2012

解决方案


我猜你正在寻找 EOMONTH 功能

像这样的一些想法可能会帮助您解决问题

DECLARE @date VARCHAR(10) = '02/28/2019'

SELECT CASE WHEN (EOMONTH(@date) = FORMAT(CAST(@date AS DATETIME),'yyyy-MM-dd')) 
                  THEN EOMONTH(DATEADD(month,1,@date))
            ELSE  DATEADD(month,1,@date)
       END

注意:我使用了格式函数,因为 EOMONTH 以 'yyyy-MM-dd' 格式返回日期

更新

DECLARE @dates TABLE
(
  FromDate DATETIME, 
  ToDate DATETIME
)

INSERT INTO @dates (FromDate)
VALUES('12/31/2017'),('1/31/2018'),('2/28/2018'),('3/31/2018')



select * from @dates

UPDATE @dates 
SET ToDate =CASE WHEN (EOMONTH(FromDate) = FORMAT(CAST(FromDate AS DATETIME),'yyyy-MM-dd')) 
                  THEN EOMONTH(DATEADD(month,1,FromDate))
            ELSE  DATEADD(month,1,FromDate)
       END

       SELECT * FROM @dates

运行这个,你可以看到最终的输出


推荐阅读