SQL 计算两个日期之间相差的秒数、分钟数和小时数,算出两个日期之间相差多少秒。例如,希望知道 ALLEN 和 WARD 的 HIREDATE
之间相差多少秒、多少分钟以及多少小时。
SQL 计算两个日期之间相差的秒数、分钟数和小时数 问题描述
算出两个日期之间相差多少秒。例如,希望知道 ALLEN 和 WARD 的 HIREDATE
之间相差多少秒、多少分钟以及多少小时。
SQL 计算两个日期之间相差的秒数、分钟数和小时数 解决方案
如果我们能算出来两个日期之间相差多少天,那么也就能知道它们相差多少秒、多少分钟和多少小时,只需对不同的时间单位做出相应的换算即可。
DB2
使用 DAYS
函数计算 ALLEN 和 WARD 的 HIREDATE
之间相差多少天,然后进行时间单位换算。
1 select dy*24 hr, dy*24*60 min, dy*24*60*60 sec
2 from (
3 select ( days(max(case when ename = 'WARD'
4 then hiredate
5 end)) -
6 days(max(case when ename = 'ALLEN'
7 then hiredate
8 end))
9 ) as dy
10 from emp
11 ) x
MySQL 和 SQL Server
使用 DATEDIFF
函数计算 ALLEN 和 WARD 的 HIREDATE
之间相差多少天,然后进行时间单位换算。
1 select datediff(day,allen_hd,ward_hd)*24 hr,
2 datediff(day,allen_hd,ward_hd)*24*60 min,
3 datediff(day,allen_hd,ward_hd)*24*60*60 sec
4 from (
5 select max(case when ename = 'WARD'
6 then hiredate
7 end) as ward_hd,
8 max(case when ename = 'ALLEN'
9 then hiredate
10 end) as allen_hd
11 from emp
12 ) x
Oracle 和 PostgreSQL
使用减法计算 ALLEN 和 WARD 的 HIREDATE
之间相差多少天,然后进行时间单位换算。
1 select dy*24 as hr, dy*24*60 as min, dy*24*60*60 as sec
2 from (
3 select (max(case when ename = 'WARD'
4 then hiredate
5 end) -
6 max(case when ename = 'ALLEN'
7 then hiredate
8 end)) as dy
9 from emp
10 ) x
SQL 计算两个日期之间相差的秒数、分钟数和小时数 扩展知识
在上述所有的解决方案中,内嵌视图 X
都被用来获取 WARD 和 ALLEN 的 HIREDATE
,如下所示。
select max(case when ename = 'WARD'
then hiredate
end) as ward_hd,
max(case when ename = 'ALLEN'
then hiredate
end) as allen_hd
from emp
WARD_HD ALLEN_HD
----------- -----------
22-FEB-1981 20-FEB-1981
WARD_HD
和 ALLEN_HD
之间相差的天数分别乘以 24(一天的小时数),1440(一天的分钟数)和 86400(一天的秒数),就得到最终结果了。