【问题标题】:How to add year and end of month in sql query如何在sql查询中添加年份和月末
【发布时间】:2017-04-05 05:25:23
【问题描述】:

马布海!

是否有任何用于将日期更新为额外 2 年和月末的简码?

示例: 开户时间:2017-04-04
有效期:2019-04-30

UPDATE dbname SET [Expiry] = DateAdd(year,2,[AccountOpened]) 

不添加这个UPDATE dbname SET [Expiry] = DateAdd(mm,1,[AccountOpened]) 因为它将添加 1 个月而不是上个月的日期。

谢谢

【问题讨论】:

  • 如果您谈论的是 SQL Server,它现在有一个 EOMONTH 函数。在您的情况下,您可以将它与第二个参数 24 一起使用:EOMONTH(AccountOpened, 24)
  • 请标记您的 DBMS。是 MySQL 吗? PostgreSQL? SQL 服务器? ...您应该始终使用 SQL 问题标记您的 DBMS 以获得适当的答案。
  • 感谢提醒,是的,它用于 sql server 很抱歉造成混乱。注意到这一点。

标签: sql sql-server dateadd


【解决方案1】:

如果您使用 SQLSERVER,下面的脚本将给出期望的结果。在执行 UPDATE 操作之前取回原始数据。

UPDATE dbname 
SET [Expiry] = DATEADD(d,-1,DATEADD(m,DATEDIFF(m,0, (DATEADD(YY,2,AccountOpened))) + 1,0))

【讨论】:

    【解决方案2】:

    这应该适用于 Sql Server(我认为任何版本)

    UPDATE dbName
    SET [Expiry] = DATEADD(MONTH, ((YEAR([AccountOpened]) - 1898) * 12) + MONTH([AccountOpened]), -1)
    

    I made a fiddle

    对于 Sql Server 2012+,您可以:

    UPDATE dbName SET [Expiry] = EOMONTH([AccountOpened], 24)
    

    对于 MySql(我猜你没有使用它,因为你在你的字段中使用了方括号,但在这里它仍然存在):

    UPDATE dbName SET Expiry = LAST_DAY(DATE_ADD(AccountOpened, INTERVAL 2 YEAR))    
    

    【讨论】:

      【解决方案3】:

      您在寻找这个查询吗?

      Where Clause = CAST([CustomDate2] AS DATE) between CAST(GETDATE() AS DATE) 和 DATEADD(day, +/-number here,CAST(GETDATE() AS DATE))

      SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,"your date")+1,0))
      

      LastDay_AnyMonth 结果集: LastDay_AnyMonth ————————

      2007-08-31 23:59:59.000

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-08
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多