我有类似的要求,我有一个月要向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
我已经设置了正常的日历,可以使用。有人可以帮忙吗。
答案 0 :(得分:0)
您可以像下面这样使用DATEADD()函数:
SELECT DATEADD(month, 1, '02/22/2018') AS DateAdd;
答案 1 :(得分:0)
我猜您正在寻找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
运行此命令,您将看到最终输出