SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'
任何人都可以告诉我这个查询如何工作以获得当月的第一天吗?
答案 0 :(得分:5)
首先
Datediff(月,0,Getdate())将给出从1900年开始的总月数
从1900年开始,您添加上述月份返回的月份,以便获得月份的第一个日期
例如:如果我们采取现在的月份
Datediff(月,0,Getdate())= 1349个月
如果您在'1900/01/01'中添加1349个月,您将在本月第一次约会'2012/06/01'
答案 1 :(得分:5)
此模式可用于实现许多不同的效果。一般模式是:
DATEADD(part,DATEDIFF(part,x,z),y)
part
与日期的组成部分相同,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
的实际值并不重要。重要的是它们之间的关系。
答案 2 :(得分:0)
我需要你这个。它会显示当月第一天的名称和编号。
SELECT DatePart(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayNumber
, DateName(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayName
答案 3 :(得分:0)
选择DATEADD(MM,datediff(月,0,getdate()),0)first_day_of_month
去
选择DATEADD(mm,datediff(月,0,getdate())+ 1,0)-1 last_day_of_currentmonth
答案 4 :(得分:0)
我使用了以下内容:
DATEADD(DAY, (-1 * DATEPART(DAY,GetDate()) + 1), GetDate() )
基本上,我们将负数天+ 1添加到当前日期。