Sql确定两个日期之间的月份数或年数
问题
求两个日期之间相差的月数或年数。例如,求第一个员工和最后一个员工聘用之间相差的月份数,以及这些月折合的年数。
解决方案
由于一年有12个月,因此,获得两个日期之间的月份数之后,再除以12,就能得到年数。在有了相应的解决方案后,可以根据此年数的不同用途对结果进行舍/入。例如,表EMP中的第一个HIREDATE(聘用日期)是“17-DEC-1980”,最后一个 HIREDATE是“12-JAN-1983”。如果对年进行减法运算(1983减去1980),结果是3年。然而,月份差大约为25(两年多一点儿)。所以应该修改解决方案。下列的解决方案返回的结果是25个月及2年。
DB2和MySQL
使用函数YEAR和MONTH为给定日期返回4位数的年份和两位数的月份:
1 select mnth, mnth/12
2 from (
3 select (year(max_hd) - year(min_hd))*12 +
4 (month(max_hd) - month(min_hd)) as mnth
5 from (
6 select min(hiredate) as min_hd, max(hiredate) as max_hd
7 from emp
8 ) x
9 ) y
Oracle
使用函数MONTHS_BETWEEN,将得到两个日期之间相差的月数(要得到相差年数,只需除以12即可):
1 select months_between(max_hd,min_hd),
2 months_between(max_hd,min_hd)/12
3 from (
4 select min(hiredate) min_hd, max(hiredate) max_hd
5 from emp
6 ) x
PostgreSQL
使用函数EXTRACT,为给定日期返回4位数的年和两位数的月:
1 select mnth, mnth/12
2 from (
3 select ( extract(year from max_hd) -
4 extract(year from min_hd) ) * 12
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载
- 1
- 2
前往页