sql - 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
我有一个正常的日历设置,我可以使用有人可以帮忙吗?
解决方案
我猜你正在寻找 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
运行这个,你可以看到最终的输出
推荐阅读
- spring-boot - Spock 测试不会与 start.spring.io 创建的新 spring-boot 项目一起运行
- sql-server - 使用 T-SQL 比较同一表行中的日期
- python - 如何让熊猫根据数据框中的特定值调整我的公式?
- c++ - 为什么不能默认构造 std::chrono time_point 成员变量的 std::atomic ?
- windows - 将 unicode 文本导入 cmd.exe
- javascript - 如何通过 PHP 和 JS 重用相同的混合代码片段?最佳实践?
- regex - Monaco-editor 没有正确评估负前瞻正则表达式
- swift - 将数据从一个类快速传递到另一个类
- docker - nginx: [emerg] open() "/run/nginx.pid" 失败 (13: Permission denied)
- python - pandas 究竟在为这些数据切片做些什么呢?