SQL Server中的日期和时间:DATEADD()

我们现在处于SQL Server和Azure SQL数据库中关于日期和时间的长篇系列的主页。

本周我们将讨论日期和时间中我最喜欢的T-SQL函数之一:   DATEADD ()

句法

与类似的功能一样,   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

SELECT DATEADD(DAY,1,'20181031')
- 返回DATETIME值'2018-11-01 00:00:00.000'

但是,如果我们使用   DATETIME2  输入值,结果将是一个   DATETIME2  值。

SELECT DATEADD(纳秒,100,CAST('20181031'  AS DATETIME2))
- 返回DATETIME2值'2018-10-31 00:00:00.0000001'

加减

我们之前看到过   DATEADD  可以用于加法     减法,这使得向后和向前计算值变得容易。 我们假设我们需要计算100天前的时间点。 如果我们以今天为出发点,它将如下所示:

DECLARE  @dt DATETIME2 = SYSUTCDATETIME();
SELECT  @dt  AS [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月底添加一个月:

SELECT DATEADD(MONTH,1,'20180228')
- 返回DATETIME值'20180328'

但是,如果我们在2018年1月底添加一个,两个或三个月,我们会看到不同的结果:

SELECT DATEADD(MONTH,1,'20180131');
- 返回DATETIME值'20180228'

SELECT DATEADD(MONTH,2,'20180131');
- 返回DATETIME值'20180331'

SELECT DATEADD(MONTH,3,'20180131');
- 返回DATETIME值'20180430'

DATEADD  是一个非常有用的系统函数在T-SQL中添加和减去日期和时间的值,我广泛使用。 只要我们记住它围绕数据类型和数月长度的怪癖,它就会非常强大。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2221522/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31557424/viewspace-2221522/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值