查找Oracle SQL中两个varchar日期之间的天数

时间:2016-12-27 12:50:58

标签: oracle

我是Oracle SQL的初学者,我想要两个问题。

首先,我想找到两个事件之间的天数(所以当它们是肯定的时候)。这两个日期目前是varchars(!)。

伪代码: 当请求为是且销售为是时,从request_date中减去sales_date。

数据如下所示:

Id  request request_date    sales          sales_date 
1   yes     2 feb14         yes             3 feb 14
2   yes     3 feb 14        no              3 feb 14
3   no      4 feb 14        no              5 feb 14
4   no      4 feb 14        yes             6 feb 14

理想情况下,我希望这是结果:

Id  request request_date    sales   sales_date   days_between_request_sales
1    yes    2 feb14         yes       3 feb 14          1 

我的第二个问题是,如果我得到所有这些结果,那么我怎样才能得到所有日期的平均值?

3 个答案:

答案 0 :(得分:0)

您可以尝试使用:

select trunc(to_date(sales_date,'dd-mm-yy') - to_date(request_date, 'dd-mm-yy')) as days 
from <yourtable>
where sales = 'yes'
and request = 'yes'

演示:

select trunc(to_date('3 feb 14','dd-mm-yy') - to_date('1 feb 14', 'dd-mm-yy')) as days 
from dual

输出:

    DAYS
----------
     2

平均:

select avg(trunc(to_date(sales_date,'dd-mm-yy') - to_date(request_date, 'dd-mm-yy'))) as Average
    from <yourtable>
    where sales = 'yes'
    and request = 'yes'

答案 1 :(得分:0)

假设你有一张这样的表:

create table yourTable(Id, request, request_date, sales, sales_date) as ( 
    select 1   ,'yes',     '2 feb 14',        'yes'  ,           '3 feb 14' from dual union all
    select 2   ,'yes',     '3 feb 14',        'no'   ,           '3 feb 14' from dual union all
    select 3   ,'no' ,     '4 feb 14',        'no'   ,           '5 feb 14' from dual union all
    select 4   ,'no' ,     '4 feb 14',        'no'   ,           '6 feb 14' from dual
)

假设您的字符串始终以您显示的格式表示日期,您可以使用:

select Id, request, request_date, sales, sales_date,
       to_date(sales_date, 'dd mon rr') - to_date(request_date, 'dd mon rr') as days_between_request_sales
from yourTable
where sales = 'yes'
  and request = 'yes'

要计算这些结果数字天数的平均值,您只需使用AVG:

select avg (to_date(sales_date, 'dd mon rr') - to_date(request_date, 'dd mon rr') ) as average
from yourTable
where sales = 'yes'
 and request = 'yes'

答案 2 :(得分:0)

我没有理解它与前一个有什么关系to_date(sales_date,&#39; dd-mm-yyyy&#39;)是完全错误的,因为你的格式是dd mon yy所以Aleksej建议的是正确的to_date(sales_date,&#39; dd mon rr&#39;)绝对正确。他可能错过了一个条件请求=&#39;是&#39 ;.