3
SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'

谁能告诉我这个查询如何获得当月的第一天?

4

5 回答 5

5

首先

Datediff(month, 0, Getdate()) 将给出从 1900 年开始的总月数

并从 1900 开始添加上述月份返回的月份,因此您将获得月份的第一个日期

例如:如果我们取当前月份,那么

Datediff(月, 0, Getdate()) = 1349 个月

如果您将 1349 个月添加到“1900/01/01”,您将获得本月的第一个日期“2012/06/01”

于 2012-06-15T06:23:57.047 回答
5

DATEADD/DATEDIFF

此模式可用于实现许多不同的效果。一般模式是:

DATEADD(part,DATEDIFF(part,x,z),y)

wherepart是日期的同一个组成部分,x通常y是常数,z是要调整的日期。

xy设置为相同的常数时,则具有消除元素z之外的所有组件的效果part,并将这些组件替换为 中的相应组件y。(0与 处理相同1900-01-01T00:00:00

因此,SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0)获取当前日期 ( z= GetDate()),并将其超出monthday和所有时间组件)的部分替换为1900-01-01T00:00:00.

要开始今天,您将使用:

DATEADD(day,DATEDIFF(day,0,GETDATE()),0)

这种模式变得更有趣的地方在于,它可以用于在不相等x时实现“抵消”效果。y例如,要获取上个月的最后一天,您可以执行以下操作:

DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001231')

x在这里,和的实际值y并不重要。重要的是他们之间的关系。

于 2012-06-15T06:33:24.387 回答
0

我觉得你需要这个。它将为您提供当月第一天的名称和编号。

SELECT DatePart(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayNumber
     , DateName(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate()))  FirstDayName
于 2012-06-15T06:37:19.250 回答
0

选择 DATEADD(MM,datediff(month,0,getdate()),0) first_day_of_month

选择 DATEADD(mm,datediff(month,0,getdate())+1,0)-1 last_day_of_currentmonth

于 2013-10-28T10:48:35.693 回答
0

我使用了以下内容:

DATEADD(DAY, (-1 * DATEPART(DAY,GetDate()) + 1), GetDate() )

基本上,我们将负天数 + 1 添加到当前日期。

于 2014-02-04T22:18:11.007 回答