关于dateadd与datediff的使用方法
DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期,DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。
1、SQL Server DATEADD() 函数
DATEADD() 函数在日期中添加或减去指定的时间间隔。
语法
DATEADD(datepart,number,date)
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
| datepart | 缩写 |
|---|---|
| 年 | yy, yyyy |
| 季度 | qq, q |
| 月 | mm, m |
| 年中的日 | dy, y |
| 日 | dd, d |
| 周 | wk, ww |
| 星期 | dw, w |
| 小时 | hh |
| 分钟 | mi, n |
| 秒 | ss, s |
| 毫秒 | ms |
| 微妙 | mcs |
| 纳秒 | ns |
假设我们有下面这个 “Orders” 表:
| OrderId | ProductName | OrderDate |
|---|---|---|
| 1 | ‘Computer’ | 2008-12-29 16:25:46.635 |
现在,我们希望向 “OrderDate” 添加 2 天,这样就可以找到付款日期。
SELECT OrderId,
DATEADD(day,2,OrderDate)
AS OrderPayDate
FROM Orders
结果:
| OrderId | OrderPayDate |
|---|---|
| 1 | 2008-12-31 16:25:46.635 |
2、SQL Server DATEDIFF() 函数
ver DATE
DATEDIFF() 函数返回两个日期之间的天数。
语法
DATEDIFF(datepart,startdate,enddate)
startdate 和 enddate 参数是合法的日期表达式。
datepart 参数可以是下列的值:
| datepart | 缩写 |
|---|---|
| 年 | yy, yyyy |
| 季度 | qq, q |
| 月 | mm, m |
| 年中的日 | dy, y |
| 日 | dd, d |
| 周 | wk, ww |
| 星期 | dw, w |
| 小时 | hh |
| 分钟 | mi, n |
| 秒 | ss, s |
| 毫秒 | ms |
| 微妙 | mcs |
| 纳秒 | ns |
实例
使用如下 SELECT 语句:
SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
结果:
| DiffDate |
|---|
| 1 |
使用如下 SELECT 语句:
SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
结果:
| DiffDate |
|---|
| -1 |
3、DATEADD和DATEDIFF可以组合获取指定时间。
DATEADD(datepart,number,date)
SELECT OrderId,
DATEADD(day,2,OrderDate)
AS OrderPayDate
FROM Orders
# 本月的第一天:
Select dateadd(ms,0,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) as 时间
# 本月的最后一天:
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
# 上个月的最后一天:
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) as 时间
# 去年的最后一天:
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
# 本年的最后一天:
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
# 2016-01-21的12个月前的那个月的第一天:
Select dateadd(mm,-12,DATEADD(mm, DATEDIFF(mm,0,'2016-01-21'), 0)) as 时间
# 一年中指定周的第一天:
DECLARE @本年第一天 datetime,@本年第一天是星期几 int,@Week int
set @本年第一天=DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0))
set @本年第一天是星期几=DATEPART(dw,DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0)))
set @Week=1--今年第一周
select DATEADD(day,(@Week-1)*7-@本年第一天是星期几+2,@本年第一天)
一天是星期几=DATEPART(dw,DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0)))
set @Week=1–今年第一周
select DATEADD(day,(@Week-1)*7-@本年第一天是星期几+2,@本年第一天)
本文详细介绍了SQL Server中的DATEADD和DATEDIFF函数。DATEADD函数用于在日期上增加或减少指定的时间间隔,DATEDIFF函数则计算两个日期间的天数。文章通过实例展示了如何使用这两个函数,并指出它们可以结合使用来获取特定时间。

616

被折叠的 条评论
为什么被折叠?



