此查询如何工作以获取当月的第一天?

时间:2012-06-15 06:14:44

标签: sql sql-server sql-server-2008 tsql

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

任何人都可以告诉我这个查询如何工作以获得当月的第一天吗?

5 个答案:

答案 0 :(得分:5)

首先

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

从1900年开始,您添加上述月份返回的月份,以便获得月份的第一个日期

例如:如果我们采取现在的月份

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

如果您在'1900/01/01'中添加1349个月,您将在本月第一次约会'2012/06/01'

答案 1 :(得分:5)

DATEADD / DATEDIFF

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

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

part与日期的组成部分相同,xy通常是常量,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)

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

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

此处,xy的实际值并不重要。重要的是它们之间的关系。

答案 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添加到当前日期。