【发布时间】:2012-07-26 08:17:39
【问题描述】:
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
谁能解释一下。
【问题讨论】:
标签: sql-server-2008
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
谁能解释一下。
【问题讨论】:
标签: sql-server-2008
这将为您提供给定日期的每月第一天
内选
select DATEDIFF(MONTH, 0, GETDATE()) 将给出从 1900-01-01 开始的月份数
这里是 1350
这将被添加到 1900-01-01 ,但只有几个月
select DATEADD(MONTH,1350,0) 将给出 2012-07-01 00:00:00.000
这是当月的开始。
我认为这是查找任何给定日期的月初的最有效方法。
【讨论】:
DateDiff 函数返回多少秒、多少个月、多少年 - 无论您在第一个日期(此处为 0)和第二个日期(此处为当前日期)之间指定的时间间隔。
DATEDIFF(MONTH, 0, '2-14-2015') --returns month. 0 is for 1/1/1900, and getdate is the current date
--(i used a set date bc dates will change as this post gets older).
result: 1381
在我的工作中,我使用了 2015 年 2 月 14 日的日期,它给了我自 1900 年 1 月 1 日以来的 1381 个月数。我像这样将 1381 放入 dateadd 函数中......
select Dateadd(MONTH, 1381, 0)
result: 2015-02-01 00:00:00.000
基本上,它获取最内层公式的日期中指定的任何月份的第一天。
我必须弄清楚的代码更进一步,并从该结果中减去 1 秒,以得到该月的最后一天 11:59:59,就像这样......
select DATEADD(s, -1, '2015-02-01 00:00:00.000')
所有的公式看起来像这样:
DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1,0))
希望这对某人有所帮助。 :)
【讨论】:
现在是本月的开始。它计算自 1900 年 1 月以来的月数,并将它们添加到 1900 年 1 月 1 日以获得当前月份的开始
【讨论】:
The DATEDIFF will give you date diff in month from January 1 1900 to current date
AND
The DATEADD will add (DATEDIFF) results months to your last parameter of DATEADD
【讨论】:
DATEADD 函数将时间间隔添加到您指定的日期。为了 例如,如果 SalesOrderHeader 表中所有订单的到期日期 滑了 3 天,您可以通过以下方式获取新的日期 声明:
USE AdventureWorks;
GO
SELECT DATEADD(day, 3, DueDate)
FROM Sales.SalesOrderHeader;
GO
DATEDIFF 函数计算日期部分中的时间段 在您指定的两个日期的第二个和第一个之间。换句话说, 它找到两个日期之间的间隔。结果是一个有符号整数 日期部分中的值等于 date2 - date1。以下查询使用 日期为 2001 年 11 月 30 日,并找出经过的天数 DueDate 和那个日期之间:
USE AdventureWorks;
GO
SELECT DATEDIFF(day, DueDate, 'Nov 30 2001')
FROM Sales.SalesOrderHeader;
GO
SELECT DATEDIFF(year, '20051220', '20060101')
SELECT DATEDIFF(month, '20051220', '20060101')
SELECT DATEDIFF(day, '20051220', '20060101')
【讨论】: