我们现在处于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中添加和减去日期和时间的值,我广泛使用。只要我们记住它围绕数据类型和数月长度的怪癖,它就会非常强大。

SQL Server中的日期和时间:DATEADD()相关推荐

  1. sql server中对日期字段值的比较

    本文转自:http://www.cnblogs.com/feison/articles/166981.html sql server中对日期字段的比较方式有多种,介绍几种常用的方式: 用northwi ...

  2. SQL Server中的日期时间类型

    一. 数据类型 SQL Server008在上一个版本的基础上把日期时间类的数据类型增加到了六个.除了SQL Server2005的datetime和smalltime之外,加了date,dateti ...

  3. Sql Server系列:日期和时间函数

    1. 获取系统当前日期函数GETDATE() GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime. SELECT GETDATE() 2. 返回UTC日期的函数G ...

  4. oracle sql 格式化日期,怎么在 SQL Server中 将日期格式化

    to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,需要的朋友可以参考下 在Oracle数据库中,Oracle to_da ...

  5. SQL Server中时间格式转换函数convert()的使用

    convert(varchar(10),字段名,转换格式) CONVERT为日期转换函数,一般就是在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar, ...

  6. sql server中datetime默认值设置和日期函数

    sql server中datetime默认值设置和日期函数 select CONVERT(varchar, getdate(), 120 )         -----------------> ...

  7. 有关SQL Server中日期的常见问题解答

    介绍 (Introduction) In this article, I compiled a list of FAQs and Answers about dates. 在本文中,我整理了有关日期的 ...

  8. 在SQL server中设置时间格式

    在SQL server中设置时间格式 2008-01-13 12:21:02 今天在vs中更新sqlserver,却发现我vs中是当前时间,insert到数据库中却变成了1905年,搞了半天,原来是s ...

  9. MS SQL Server中的CONVERT日期格式化大全

    來源:http://www.knowsky.com/345490.html CONVERT 将某种数据类型的表达式显式转换为另一种 数据类型.由于某些需求经常用到取日期格式的不同.现以下可在 SQL ...

最新文章

  1. 确定一组矩形是否有两个重叠的算法
  2. 1346. 检查整数及其两倍数是否存在 golang
  3. C语言Node lt T gt,c语言论坛填空;#includelt;stdio.hgt;# 爱问知识人
  4. 【CodeForces - 803D】Magazine Ad(二分答案)
  5. 【2016年第1期】基于大数据的小麦蚜虫发生程度决策树预测分类模型
  6. axios post object object_深入学习Axios源码(构建配置)
  7. C++中 类与类之间的关系
  8. 退休是否需要等到对应日再进行办理?
  9. nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams (一)
  10. 日常客户咨询问题总结
  11. 用js解析经json序列化后的C#的DateTime类型数据
  12. 基于matlab雷达算法,基于MATLAB的雷达信号处理
  13. 秒杀面试之通关流程篇
  14. mmdetection - config配置文件之schedule(learning rate)
  15. Fluent瞬态结果导出为Ensight格式
  16. 知我者谓我心忧,不知我者谓我何求
  17. 【随笔1】石榴红,依旧。
  18. 游戏图片文件和声音文件的隐藏
  19. 朱棣文 哈佛开学典礼演讲
  20. new(创建)一个对象时都发生了什么?

热门文章

  1. Fiddler手机抓包,及HTTPS协议抓包【手机如何安装fiddler证书,以华为为例】
  2. 【Spark ML】第 5 章:Recommendations
  3. 非线性微分方程的平均法
  4. 删除U盘上的EFI分区
  5. 视频格式怎么转换,将mp4格式转为mov格式
  6. @MapKey的使用
  7. win10打开任务管理器的快捷键
  8. Web前端工程师-优秀简历汇总
  9. java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现
  10. 最简单的pentaho report desinger 5.01报表的制作