旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

SQL中datediff函数怎样用?(代码详解)【MySQL教程】,SQL,datediff

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:64评论:0


导读:在SQLServer中,可以运用T-SQLDATEDIFF()函数返回两个日期之间的差别。它适用于任何可以剖析为time、date、smalldatetime、datetime...
在SQL Server中,可以运用T-SQL DATEDIFF()函数返回两个日期之间的差别。它适用于任何可以剖析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式。因而,你也可以获得两次的差值。

本文供应了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函数怎样用?(代码详解)的细致内容,更多请关注ki4网别的相干文章!

标签:SQLdatediff


欢迎 发表评论: