本文摘自PHP中文网,作者藏色散人,侵删。
在SQL Server中,可以使用T-SQL DATEDIFF()函数返回两个日期之间的差异。它适用于任何可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式。因此,你也可以得到两次的差值。
本文提供了SQL Server中的DATEDIFF()函数 的使用示例。
DATEDIFF()函数语法如下:
1
DATEDIFF ( datepart , startdate , enddate )
其中datepart是你想要比较的日期的一部分。startdate是第一个日期,enddate是结束日期。
它的工作方式是从enddate中减去startdate。
示例1
下面是一个基本的例子,我们可以算出两个日期之间的天数:
1
SELECT DATEDIFF(day,
'2001-01-01'
,
'2002-01-01'
) AS Result;
结果:
1
2
3
4
5
+----------+
| Result |
|----------|
| 365 |
+----------+
示例2
下面是另一个例子,我声明了两个变量并为它们分配了两个不同的日期(我使用DATEADD()将第一个日期添加1年)。然后使用DATEDIFF()返回该日期的各个dateparts:
1
2
3
4
5
6
7
8
9
DECLARE @date1 datetime2 =
'2000-01-01 00:00:00.0000000'
;
DECLARE @date2 datetime2 = DATEADD(year, 1, @date1);
SELECT
DATEDIFF( year, @date1, @date2 ) AS Years,
DATEDIFF( quarter, @date1, @date2 ) AS Quarters,
DATEDIFF( month, @date1, @date2 ) AS Months,
DATEDIFF( week, @date1, @date2 ) AS Weeks,
DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear,
DATEDIFF( day, @date1, @date2 ) AS Days;
结果:
1
2
3
4
5
+---------+------------+----------+---------+-------------+--------+
| Years | Quarters | Months | Weeks | DayOfYear | Days |
|---------+------------+----------+---------+-------------+--------|
| 1 | 4 | 12 | 53 | 366 | 366 |
+---------+------------+----------+---------+-------------+--------+
示例3
如前所述,你还可以返回日期之间的时间部分。下面是返回日期/时间值之间的小时、分钟和秒数的例子:
1
2
3
4
5
6
DECLARE @date1 datetime2 =
'2000-01-01 00:00:00.0000000'
;
DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1);
SELECT
DATEDIFF( hour, @date1, @date2 ) AS Hours,
DATEDIFF( minute, @date1, @date2 ) AS Minutes,
DATEDIFF( second, @date1, @date2 ) AS Seconds;
结果:
1
2
3
4
5
+---------+-----------+-----------+
| Hours | Minutes | Seconds |
|---------+-----------+-----------|
| 1 | 60 | 3600 |
+---------+-----------+-----------+
示例4
下面是一个获取两个日期/时间值之间的毫秒、微秒和纳秒数的例子:
1
2
3
4
5
6
DECLARE @date1 datetime2 =
'2000-01-01 00:00:00.0000000'
;
DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1);
SELECT
DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds,
DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds,
DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
结果:
1
2
3
4
5
+----------------+----------------+---------------+
| Milliseconds | Microseconds | Nanoseconds |
|----------------+----------------+---------------|
| 1 | 1000 | 1000000 |
+----------------+----------------+---------------+
示例5 - Error错误!
如果你尝试做一些极端的事情,比如,返回100年后的纳秒数,你会得到一个错误。这是因为DATEDIFF()返回一个int值,100年内的纳秒数比int数据类型能够处理的纳秒数还要多。
如果你试着这么做会发生什么呢?
1
2
3
4
5
6
DECLARE @date1 datetime2 =
'2000-01-01 00:00:00.0000000'
;
DECLARE @date2 datetime2 = DATEADD(year, 100, @date1);
SELECT
DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds,
DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds,
DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
结果:
1
The datediff
function
resulted in an overflow. The number of dateparts separating two
date
/time instances is too large. Try to
use
datediff with a less precise datepart.
当然如果你真的必须找出100年内有多少纳秒,那么可以使用DATEDIFF_BIG()函数。这个函数返回一个带符号的bigint数据类型,它允许你返回比DATEDIFF()更大的值。
相关推荐:《MySQL教程》
以上就是SQL中datediff函数怎么用?(代码详解) 的详细内容,更多文章请关注木庄网络博客 !
相关阅读 >>
mysql 百万级数据的4种查询优化方式
详解sql 中group by的用法
什么是pl / sql ?pl / sql 的简单介绍
sql 中select语句的语法结构是什么?
navicat和sql 的区别
学sql 能干什么
sql 更新记录的命令是什么
oracle常用sql 语句
sql server将查询结果转换为xml和json
sql 语句中的ddl类型的数据库定义语言操作
更多相关阅读请进入《sql 》频道 >>
¥41.1元 机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » SQL中datediff函数怎么用?(代码详解)