• 技术文章 >数据库 >mysql教程

    SQL中datediff函数怎么用?(代码详解)

    藏色散人藏色散人2019-03-26 13:46:05原创13901
    在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函数怎么用?(代码详解)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:SQL datediff
    上一篇:什么是T-SQL? 下一篇:mysql存储引擎有哪些?
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• Access中的DateDiff 函数• DateDiff在Access与Sql server中的差别• DateDiff函数• MySQL中时间类型的比较datediff• sql 日期相减DATEDIFF()返回两日期天数
    1/1

    PHP中文网