SQL 计算两个日期之间的天数

SQL 计算两个日期之间的天数,找出两个日期之间相差多少天。例如,希望知道员工 ALLEN 和 WARD 的 HIREDATE 相差多少天。

SQL 计算两个日期之间的天数 问题描述

找出两个日期之间相差多少天。例如,希望知道员工 ALLEN 和 WARD 的 HIREDATE 相差多少天。

SQL 计算两个日期之间的天数 解决方案

DB2
使用内嵌视图找出 WARD 和 ALLEN 的 HIREDATE。然后,使用 DAYS 函数从一个 HIREDATE 里减去另一个。

 1  select days(ward_hd) - days(allen_hd)
 2    from (
 3  select hiredate as ward_hd
 4    from emp
 5   where ename = 'WARD'
 6         ) x,
 7         (
 8  select hiredate as allen_hd
 9    from emp
10   where ename = 'ALLEN'
11         ) y

Oracle 和 PostgreSQL
使用内嵌视图找出 WARD 和 ALLEN 的 HIREDATE,然后相减。

 1  select ward_hd - allen_hd
 2    from (
 3  select hiredate as ward_hd
 4    from emp
 5   where ename = 'WARD'
 6         ) x,
 7         (
 8  select hiredate as allen_hd
 9    from emp
10   where ename = 'ALLEN'
11         ) y

MySQLSQL Server
使用 DATEDIFF 函数找出两个日期之间相差多少天。MySQLDATEDIFF 函数只需要两个参数(两个将要相减的日期值),并且相对较早的日期值应该作为第一个参数以避免出现负数(SQL Server 正好相反)。SQL Server 的 DATEDIFF 函数可以返回指定的时间单位(本例中我们希望以天为单位)。下面给出了 SQL Server 的解决方案。

 1  select datediff(day,allen_hd,ward_hd)
 2    from (
 3  select hiredate as ward_hd
 4    from emp
 5   where ename = 'WARD'
 6         ) x,
 7         (
 8  select hiredate as allen_hd
 9    from emp
10   where ename = 'ALLEN'
11         ) y

对于 MySQL 而言,只需去掉 DATEDIFF 函数的第一个参数,并翻转 ALLEN_HDWARD_HD 的顺序即可。

SQL 计算两个日期之间的天数 扩展知识

上述全部解决方案中,内嵌视图 XY 被用于分别获取 WARD 和 ALLEN 的 HIREDATE。例如:

select ward_hd, allen_hd
  from (
select hiredate as ward_hd
  from emp
 where ename = 'WARD'
       ) y,
       (
select hiredate as allen_hd
  from emp
 where ename = 'ALLEN'
       ) x
 
WARD_HD     ALLEN_HD
----------- ---------
22-FEB-1981 20-FEB-1981

因为 XY 之间没有任何连接条件,这里会产生笛卡儿积。然后,由于本例中的 XY 都只有一条数据,因而即使没有连接条件也不会有问题,结果集最终只会有一行(很明显,因为 1×1=1)。为了计算两个日期之间相差多少天,只要使用适当的方法用一个日期减去另一个日期即可。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

SQL 实例