Sql计算两个日期之间的天数
2007-10-18 09:20
405 查看
问题
求两个日期之间相差的天数。例如,想了解员工ALLEN 和员工WARD的HIREDATE(聘用日期)之间相差的天数。
解决方案
DB2
使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后使用DAYS 函数从一个HIREDATE中减去另一个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中,可以指定该函数返回值所表示的类型(在这个例子中,返回以“日”为单位的差)。下面的解决方案采用了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用户只需去掉该函数的第一个参数,交换一下传递ALLEN_HD和WARD_HD的顺序即可。
讨论
对于所有的解决方案,内联视图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)。要得到相差的天数,只需使用相应数据库中方法,将返回的两个值相减即可。
求两个日期之间相差的天数。例如,想了解员工ALLEN 和员工WARD的HIREDATE(聘用日期)之间相差的天数。
解决方案
DB2
使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后使用DAYS 函数从一个HIREDATE中减去另一个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中,可以指定该函数返回值所表示的类型(在这个例子中,返回以“日”为单位的差)。下面的解决方案采用了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用户只需去掉该函数的第一个参数,交换一下传递ALLEN_HD和WARD_HD的顺序即可。
讨论
对于所有的解决方案,内联视图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)。要得到相差的天数,只需使用相应数据库中方法,将返回的两个值相减即可。
相关文章推荐
- SQL计算两个日期之间的工作天数
- SQL计算两个日期之间的工作天数(除过周六日的天数)
- SQL计算两个日期之间的工作天数(除过周六日的天数)
- SQL计算两个日期之间相差的工作天数
- asp.net计算两个日期时间之间的差值(天数、小时、分、秒等)
- 强大的PLSQL - 计算两个日期之间的工作日天数-除去(周末和公共假日
- 如何计算两个日期之间相隔的天数?calendar的用法
- javascript、js计算两个日期之间的天数
- 计算两个日期之间的天数差C++/java
- [iPhone][cocoa] 如何计算两个日期之间的天数
- 25:计算两个日期之间的天数
- 计算两个日期之间的天数
- 在Access中计算两个日期之间的工作日天数
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- excel表格中如何计算两个日期之间的天数?
- 计算两个日期之间相差的天数
- java 计算两个日期之间天数
- JS计算两个日期之间的天数