【发布时间】:2010-09-12 09:41:11
【问题描述】:
在 SQL Server 中,根据另一个日期时间制作表示本月第一天的日期时间的最简单/最干净的方法是什么?例如,我有一个 2005 年 3 月 3 日 14:23 的变量或列,我想获得 2005 年 3 月 1 日 00:00(作为日期时间,而不是 varchar)
【问题讨论】:
标签: sql sql-server datetime date
在 SQL Server 中,根据另一个日期时间制作表示本月第一天的日期时间的最简单/最干净的方法是什么?例如,我有一个 2005 年 3 月 3 日 14:23 的变量或列,我想获得 2005 年 3 月 1 日 00:00(作为日期时间,而不是 varchar)
【问题讨论】:
标签: sql sql-server datetime date
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 日。最终效果是删除日期时间值的日期(和时间)部分。
【讨论】:
SELECT DATEADD(mm, DATEDIFF(mm, 0, @date), 0)
【讨论】:
这样的事情会起作用....
UPDATE YOUR_TABLE
SET NewColumn = DATEADD(day, (DATEPART(day, OldColumn) -1)*-1, OldColumn)
【讨论】:
DATEADD(day, 1 - DAY(OldColumn), OldColumn)。然而 DATEADD 和 DATEDIFF 方法更好,因为它还重置了时间部分。
随便用
DATEADD(DAY, 1-DAY(@date), @date)
【讨论】: