ORACLE中如何查询A时间段占B时间段多少个月?

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:18:02
例如查询在日期为2007年9月1日至2009年8月31日的合同中,从2008年5月至2008年7月期间占用合同多少个月??? 用ORACLE应该怎么写,望高手指教谢谢谢谢!!!
谢谢以上两位的解答,这个语句我是会的。。建设日期发生变化就不是这个语句能解决的了。
例如:查询在日期为2008年1月1日至2008年6月31日的合同中,从2008年5月至2008年7月期间占用合同多少个月??? 用ORACLE应该怎么写,望高手指教谢谢谢谢!!!

你这是个时间段的比较问题
指的是2008年5月,2008年7月两时间段,在2008年1月1日,2008年6月31日两时间段中能有多少个月,老麻烦了,如下:
select case when to_date('2008-1-1','yyyy-mm-dd')>to_date('2008-7','yyyy-mm') then 0 else
(case when to_date('2008-6-30','yyyy-mm-dd')<to_date('2008-5','yyyy-mm') then 0 else
(case when to_date('2008-1-1','yyyy-mm-dd')>to_date('2008-5','yyyy-mm') and to_date('2008-6-30','yyyy-mm-dd')<to_date('2008-7','yyyy-mm') then ROUND(abs(months_between(to_date('2008-6-30','yyyy-mm-dd'),to_date('2008-1-1','yyyy-mm-dd')))) else
(case when to_date('2008-1-1','yyyy-mm-dd')>to_date('2008-5','yyyy-mm') and to_date('2008-6-30','yyyy-mm-dd')>to_date('2008-7','yyyy-mm') then ROUND(abs(months_between(to_date('2008-6-30','yyyy-mm-dd'),to_date('