【问题标题】:Simplest way to create a date that is the first day of the month, given another date给定另一个日期,创建一个日期的最简单方法是该月的第一天
【发布时间】:2010-09-12 09:41:11
【问题描述】:

在 SQL Server 中,根据另一个日期时间制作表示本月第一天的日期时间的最简单/最干净的方法是什么?例如,我有一个 2005 年 3 月 3 日 14:23 的变量或列,我想获得 2005 年 3 月 1 日 00:00(作为日期时间,而不是 varchar)

【问题讨论】:

    标签: sql sql-server datetime date


    【解决方案1】:
    Select DateAdd(Month, DateDiff(Month, 0, GetDate()), 0)
    

    要在列上运行此操作,请将 GetDate() 替换为您的列名。

    这段代码的诀窍在于 DateDiff。 DateDiff 返回一个整数。第二个参数(0)表示 SQL Server 中的 0 日期,即 1900 年 1 月 1 日。因此,datediff 计算自 1900 年 1 月 1 日以来的整数月数,然后将该月数添加到 1900 年 1 月 1 日。最终效果是删除日期时间值的日期(和时间)部分。

    【讨论】:

    • 这段代码非常棒。它也适用于其他时间单位。
    【解决方案2】:
    SELECT DATEADD(mm, DATEDIFF(mm, 0, @date), 0)
    

    【讨论】:

      【解决方案3】:

      这样的事情会起作用....

      UPDATE YOUR_TABLE
      SET NewColumn = DATEADD(day, (DATEPART(day, OldColumn) -1)*-1, OldColumn)
      

      【讨论】:

      • 表达式可以简单一点:DATEADD(day, 1 - DAY(OldColumn), OldColumn)。然而 DATEADD 和 DATEDIFF 方法更好,因为它还重置了时间部分。
      【解决方案4】:

      随便用

      DATEADD(DAY, 1-DAY(@date), @date)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 2012-05-29
        • 2011-02-07
        • 1970-01-01
        • 2013-02-09
        • 2014-02-11
        相关资源
        最近更新 更多