• 学派吧-由商祺云独家赞助-https://www.sq9.cn。

SQL中datediff函数怎么用?(代码详解)-mysql教程-学派吧

MySQL 学派小编 4个月前 (04-09) 147次浏览 已收录 0个评论 扫描二维码

在 SQL Server 中,可以使用 T-SQL DATEDIFF()函数返回两个日期之间的差异。它适用于任何可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值的表达式。因此,你也可以得到两次的差值。

SQL 中 datediff 函数怎么用?(代码详解)-mysql 教程-学派吧

本文提供了 SQL Server 中的DATEDIFF()函数的使用示例。

DATEDIFF()函数语法如下:

DATEDIFF ( datepart , startdate , enddate )

其中 datepart 是你想要比较的日期的一部分。startdate 是第一个日期,enddate 是结束日期。

它的工作方式是从 enddate 中减去 startdate。

示例 1

下面是一个基本的例子,我们可以算出两个日期之间的天数:

SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;

结果:

+----------+
| Result   |
|----------|
| 365      |
+----------+

示例 2

下面是另一个例子,我声明了两个变量并为它们分配了两个不同的日期(我使用 DATEADD()将第一个日期添加 1 年)。然后使用 DATEDIFF()返回该日期的各个 dateparts:

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;

结果:

+---------+------------+----------+---------+-------------+--------+
| Years   | Quarters   | Months   | Weeks   | DayOfYear   | Days   |
|---------+------------+----------+---------+-------------+--------|
| 1       | 4          | 12       | 53      | 366         | 366    |
+---------+------------+----------+---------+-------------+--------+

示例 3

如前所述,你还可以返回日期之间的时间部分。下面是返回日期/时间值之间的小时、分钟和秒数的例子:

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;

结果:

+---------+-----------+-----------+
| Hours   | Minutes   | Seconds   |
|---------+-----------+-----------|
| 1       | 60        | 3600      |
+---------+-----------+-----------+

示例 4

下面是一个获取两个日期/时间值之间的毫秒、微秒和纳秒数的例子:

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;

结果:

+----------------+----------------+---------------+
| Milliseconds   | Microseconds   | Nanoseconds   |
|----------------+----------------+---------------|
| 1              | 1000           | 1000000       |
+----------------+----------------+---------------+

示例 5 – Error 错误!

如果你尝试做一些极端的事情,比如,返回 100 年后的纳秒数,你会得到一个错误。这是因为 DATEDIFF()返回一个 int 值,100 年内的纳秒数比 int 数据类型能够处理的纳秒数还要多。

如果你试着这么做会发生什么呢?

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;

结果:

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 函数怎么用?(代码详解)的详细内容,更多请关注 php 中文网其它相关文章!


学派吧 , 版权所有丨如未注明 , 均为原创丨
喜欢 (0)
[sqwwnet]
分享 (0)
学派小编
关于作者:
君子爱财,取之有道!踏实做人,诚信做事! 欲全天道,先全人道,人道不能全,天道远

您必须 登录 才能发表评论!