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 |
网友评论