ITPub博客

首页 > 架构设计 > 数据架构 > SQL Server中的日期和时间:DATEADD()

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

原创 数据架构 作者:Tybyq 时间:2018-11-24 15:56:45 1 删除 编辑

我们现在处于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博客 ” ,链接:https://blog.itpub.net/31557424/viewspace-2221522/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-31

  • 博文量
    206
  • 访问量
    212169