【问题标题】:SQL update date to first of next month plus three monthsSQL 更新日期为下个月的第一天加三个月
【发布时间】:2018-05-23 17:07:35
【问题描述】:

我有这个问题:

  update courseRights
         set courseRightsLevelExpires = DATEADD(MM,3,courseRightsLevelExpires)

这很好,但我真正需要的是从下个月的第一天延长到三个月。例如,如果权利今天到期,5 月 23 日,我需要更新到 6 月 1 日 + 3 个月。

是否可以在一个查询中做到这一点?

更新

因为它被标记为与另一个问题重复,我正在更新内容以说明我不仅要查找下个月的第一个日期,而且还需要在该日期上增加三个月。

【问题讨论】:

  • 它不可能重复@TabAlleman 我的要求有点不同,你可以从我的问题中看到。谢谢
  • 区别是需要加3个月?从您发布的代码看来,您已经知道该怎么做。
  • 但我不知道如何结合以下答案中回答的这两个功能

标签: sql sql-server tsql sql-server-2014


【解决方案1】:

获取下个月的第一天:

DATEADD(m, DATEDIFF(m, -1, current_timestamp), 0)

三个月后:

DATEADD(m,3,DATEADD(m, DATEDIFF(m, -1, current_timestamp), 0))

所以,如果courseRightsLevelExpires 持有您工作的基准日期:

DATEADD(m,3,DATEADD(m, DATEDIFF(m, -1, courseRightsLevelExpires), 0))

【讨论】:

    【解决方案2】:

    你可以使用eomoth()函数:

    update courseRights
    set courseRightsLevelExpires = 
        dateadd(mm, 3, dateadd(dd, 1, eomonth(courseRightsLevelExpires)));
    

    【讨论】:

      【解决方案3】:

      我会的:

      设置 nextmonthdate = last_day (你的日期) + 1 天

      【讨论】:

      • 您的解决方案不够清晰,请添加说明并说明解决问题的方法。
      • 我的伤口是这样的:
      • 您可以使用函数 LAST_DAY。它会给你任何给定日期的最后一天。再加上 1 天会给你下个月的第一天,然后再加上 3 个月的结果。例如:更新 courseRights 设置 courseRightsLevelExpires = (LAST_DAY('yyyy-mm-dd') + 1 day) + 3 MONTHS
      • 更新 courseRights 设置 courseRightsLevelExpires = (LAST_DAY(courseRightsLevelExpires) + 1 DAY) + 3 MONTHS
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多