use*_*978 3 sql t-sql sql-server sql-server-2008
SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这个查询如何工作以获得当月的第一天?
小智 5
首先
Datediff(月,0,Getdate())将给出从1900年开始的总月数
从1900年开始,您可以添加上述月份返回的月份,这样您就可以获得一个月的第一个日期
例如:如果我们采取现在的月份
Datediff(月,0,Getdate())= 1349个月
如果您在'1900/01/01'中添加1349个月,您将在本月第一次约会'2012/06/01'
该模式可用于实现许多不同的效果.一般模式是:
DATEADD(part,DATEDIFF(part,x,z),y)
Run Code Online (Sandbox Code Playgroud)
其中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)
Run Code Online (Sandbox Code Playgroud)
当这种模式变得更为有趣的是,它可以被用来实现"抵消"的效果时x和y不相等.例如,要获得上个月的最后一天,您可以:
DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001231')
Run Code Online (Sandbox Code Playgroud)
在这里,实际值x和y无关紧要.重要的是它们之间的关系.