SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'
谁能告诉我这个查询如何获得当月的第一天?
SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'
谁能告诉我这个查询如何获得当月的第一天?
首先
Datediff(month, 0, Getdate()) 将给出从 1900 年开始的总月数
并从 1900 开始添加上述月份返回的月份,因此您将获得月份的第一个日期
例如:如果我们取当前月份,那么
Datediff(月, 0, Getdate()) = 1349 个月
如果您将 1349 个月添加到“1900/01/01”,您将获得本月的第一个日期“2012/06/01”
此模式可用于实现许多不同的效果。一般模式是:
DATEADD(part,DATEDIFF(part,x,z),y)
wherepart
是日期的同一个组成部分,x
通常y
是常数,z
是要调整的日期。
当x
和y
设置为相同的常数时,则具有消除元素z
之外的所有组件的效果part
,并将这些组件替换为 中的相应组件y
。(0
与 处理相同1900-01-01T00:00:00
)
因此,SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0)
获取当前日期 ( z
= GetDate()
),并将其超出month
(day
和所有时间组件)的部分替换为1900-01-01T00:00:00
.
要开始今天,您将使用:
DATEADD(day,DATEDIFF(day,0,GETDATE()),0)
这种模式变得更有趣的地方在于,它可以用于在不相等x
时实现“抵消”效果。y
例如,要获取上个月的最后一天,您可以执行以下操作:
DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001231')
x
在这里,和的实际值y
并不重要。重要的是他们之间的关系。
我觉得你需要这个。它将为您提供当月第一天的名称和编号。
SELECT DatePart(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayNumber
, DateName(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayName
选择 DATEADD(MM,datediff(month,0,getdate()),0) first_day_of_month
去
选择 DATEADD(mm,datediff(month,0,getdate())+1,0)-1 last_day_of_currentmonth
我使用了以下内容:
DATEADD(DAY, (-1 * DATEPART(DAY,GetDate()) + 1), GetDate() )
基本上,我们将负天数 + 1 添加到当前日期。