【问题标题】:Incremental next month dates in SQLSQL中的增量下个月日期
【发布时间】:2019-07-06 03:49:52
【问题描述】:

我有类似的要求,我有一个月的文件馈送到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

我设置了一个可以使用的普通日历,有人可以帮忙吗?

【问题讨论】:

  • 我不完全明白,你有这些值的表吗?是文件吗?这 3 个值是 3 个不同的列还是一个长字符串?您说您已经完成了一半的解决方案,您可以添加您的代码尝试吗?
  • 嗨,如果我不清楚,请让我进一步详细说明。我有向 SQL Server 2012 提供的 XML 文件。有一个加载器作业可以执行此操作,我可以调整/增强此脚本中的数据。所以我想要一个查询/解决方案将当前月份日期转换为下个月日期,我可以解决一半。但是当我将 2 月文件转换为 3 月文件时,我遇到了问题。例如。 :- 02/28 需要转换为 03/28, 03/29, 03/30, 03/31。
  • @Aniket 在什么基础上将一个日期转换为 4 个不同的日期?

标签: sql date sql-server-2012


【解决方案1】:

您可以使用 DATEADD() 函数,如下所示:

SELECT DATEADD(month, 1, '02/22/2018') AS DateAdd;

【讨论】:

  • 谢谢,但是当我将 02/28 转换为 03/28、03/29、03/30 等时遇到问题。
【解决方案2】:

我猜你正在寻找 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

运行这个就可以看到最终输出了

【讨论】:

  • 感谢您的帮助,很抱歉造成混淆。我需要在下面发生。从价值 12/31/2017、1/31/2018、2/28/2018、3/31/2018 到价值 1/31/2018、2/28/2018、3/31/2018、4/30/2018
猜你喜欢
  • 1970-01-01
  • 2023-01-21
  • 2021-01-26
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 2022-01-05
相关资源
最近更新 更多