发布时间:2025-12-11 01:06:48 浏览次数:1
与类似的功能一样,DATEADD可以对日期和时间进行算术运算。语法很简单:
DATEADD (datepart, number, date)
该number部分必须是整数,并且必须在日期部分的可接受值范围内。
该datepart部分必须是以下日期部分之一(我们在之前的帖子中看到过):
| DATEPART | 缩略语 |
| 年 | 是的,yyyy |
| 25美分硬币 | qq,q |
| 月 | mm,m |
| DAYOFYEAR | dy,y |
| 天 | dd,d |
| 周 | wk,ww |
| 平日 | dw,w |
| 小时 | HH |
| 分钟 | mi,n |
| 第二 | ss,s |
| 毫秒 | 女士 |
| 微秒 | MCS |
| 纳秒 | NS |
虽然DATEADD支持上表中所示的缩写,但我们应尽一切努力使用完整表达式来确保代码的清晰度。如果我们使用缩写,SQL Server不会运行得更快。
另请注意,虽然我们可以使用纳秒加或减DATEADD,但DATETIME2数据类型的最小粒度为100纳秒,因此需要考虑舍入。
DATEADD将使用date参数中使用的数据类型返回结果。例如,如果我们使用以YYYYMMDD格式表示日期的文字字符串,则返回类型将是一个DATETIME值,因为文字字符串被隐式转换为DATETIME。
SELECTDATEADD(DAY,1,'20181031')
-返回DATETIME值'2018-11-0100:00:00.000'
但是,如果我们使用DATETIME2输入值,结果将是一个DATETIME2值。
SELECTDATEADD(纳秒,100,CAST('20181031'ASDATETIME2))-返回DATETIME2值'2018-10-3100:00:00.0000001'
我们之前看到过DATEADD可以用于加法和减法,这使得向后和向前计算值变得容易。我们假设我们需要计算100天前的时间点。如果我们以今天为出发点,它将如下所示:
declare@dtDATETIME2=SYSUTCDATETIME();
select@dtAS[TimeNow],DATEADD(DAY,-100,@dt)AS[TimeThen];
注意在部分中使用负号number。结果如下:
TimeNow: 2018-10-31 09:17:21.7866500
TimeThen: 2018-07-23 09:17:21.7866500
关于这个功能的最后一个想法。在增加或减少月数时,请注意不包含31天的月份。例如,让我们在2018年2月底添加一个月:
SELECTDATEADD(MONTH,1,'20180228')
-返回DATETIME值'20180328'
但是,如果我们在2018年1月底添加一个,两个或三个月,我们会看到不同的结果:
SELECTDATEADD(MONTH,1,'20180131');
-返回DATETIME值'20180228'
SELECTDATEADD(MONTH,2,'20180131');
-返回DATETIME值'20180331'
SELECTDATEADD(MONTH,3,'20180131');
-返回DATETIME值'20180430'
DATEADD是一个非常有用的系统函数在T-SQL中添加和减去日期和时间的值,我广泛使用。只要我们记住它围绕数据类型和数月长度的怪癖,它就会非常强大。
感谢各位的阅读,以上就是“SQL Server中的DATEADD怎么使用”的内容了,经过本文的学习后,相信大家对SQL Server中的DATEADD怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是本站,小编将为大家推送更多相关知识点的文章,欢迎关注!