美文网首页
SQL Server常用函数

SQL Server常用函数

作者: 简书冷雨 | 来源:发表于2017-04-24 14:18 被阅读0次

1、DATEDIFF() 函数

定义和用法

** DATEDIFF() 函数 **根据时间间隔类型(如年、月、日、时、分、秒、季、周等)计算两个日期之间的时间间隔数,即用于判断在两个日期之间的指定时间间隔的数目。例如,可以使用 DATEDIFF() 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。

语法

DATEDIFF(datepart, startdate, enddate)

参数

startdate 和 enddate 参数是合法的日期表达式(time, date, smalldatetime, datetime, datetime2, or datetimeoffset ),可以是表达式、列名、用户自定义变量或字符串常量。

datepart 参数为时间间隔类型,可以是下列的值:

datepart 全称 缩写
year yy, yyyy
季度 quarter qq, q
month mm, m
年中的日 dayofyear dy, y
day dd, d
week wk, ww
星期 weekday dw, w
小时 hour hh
分钟 minute mi, n
second ss, s
毫秒 millisecond ms
微妙 microsecond mcs
纳秒 nanosecond ns

备注

DATEDIFF()函数的返回值类型为 int (-2,147,483,648 +2,147,483,647),所以,当指定时间间隔类型为

  • millisecond 时, 起始日期和结束日期的最大只能相差 24天20小时31分钟23.647秒;

  • second 时,起始日期和结束日期的最大只能相差 68年。

如果 startdate 和 enddate 都只指定时间部分,而 datepart 又不是时间间隔(如年、月等),则返回 0。如,

SELECT DATEDIFF(WEEK, '20:32:32', '23:32:17');         --结果为 0
SELECT DATEDIFF(DAY, '20:32:32', '23:32:17');          --结果为 0

startdate 和 enddate 的时区在计算返回值时没有用到。

因为 smalldatetime 只精确到分,所以当 startdate 或 enddate 是 smalldatetime 类型时,秒、毫秒默认都为 0。如,

SELECT DATEDIFF(MILLISECOND, CAST('2015-02-02 20:32:10' AS SMALLDATETIME), CAST('2015-02-02 20:32:15' AS SMALLDATETIME));         --结果为 0
SELECT DATEDIFF(MILLISECOND, CAST('2015-02-02 20:32:10' AS SMALLDATETIME), CAST('2015-02-02 20:32:30' AS SMALLDATETIME));         --结果为 60000
SELECT DATEDIFF(SECOND, CAST('2015-02-02 20:32:10' AS SMALLDATETIME), CAST('2015-02-02 20:32:15' AS SMALLDATETIME));         --结果为 0
SELECT DATEDIFF(SECOND, CAST('2015-02-02 20:32:10' AS SMALLDATETIME), CAST('2015-02-02 20:32:30' AS SMALLDATETIME));         --结果为 60

如果日期类型变量只指定了时间部分,那么日期部分会设置为默认值:1900-01-01。如果只指定了日期部分,那么时间部分会设置默认值:00:00:00。

实例

例子 1
使用如下 SELECT 语句:

SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

结果:

DiffDate
1

例子 2

使用如下 SELECT 语句:

SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate

结果:

DiffDate
-1

相关文章

网友评论

      本文标题:SQL Server常用函数

      本文链接:https://www.haomeiwen.com/subject/rhhpzttx.html