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


本文摘自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函数怎么用?(代码详解)的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

简单学习sql的各种连接join

45个非常有用的 oracle 查询语句小结

一个过滤重复数据的 sql 语句

sql中的if语句用法

sqlite教程(十二):锁和并发控制详解

sql server中各类触发器的完整语法及参数说明

sql语言中,删除一个表的命令是什么?

sql语句(t-sql汇总) 用t-sql画出这些图形

sql能干什么

当忘记 sql server 管理员密码该如何处理

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...