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
MySQL 和 SQL Server
使用 DATEDIFF
函数找出两个日期之间相差多少天。MySQL 的 DATEDIFF
函数只需要两个参数(两个将要相减的日期值),并且相对较早的日期值应该作为第一个参数以避免出现负数(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_HD
和 WARD_HD
的顺序即可。
SQL 计算两个日期之间的天数 扩展知识
上述全部解决方案中,内嵌视图 X
和 Y
被用于分别获取 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
因为 X
和 Y
之间没有任何连接条件,这里会产生笛卡儿积。然后,由于本例中的 X
和 Y
都只有一条数据,因而即使没有连接条件也不会有问题,结果集最终只会有一行(很明显,因为 1×1=1)。为了计算两个日期之间相差多少天,只要使用适当的方法用一个日期减去另一个日期即可。