我是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
我的第二个问题是,如果我得到所有这些结果,那么我怎样才能得到所有日期的平均值?
答案 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 ;.