2016-12-27 12 views
0

私はOracle SQLの初心者で、2つの質問が必要です。Oracle SQLで2つのvarchar日付の間の日数を見つけよう

まず、2つのイベントの間の日数を見つけたいと思います。この2つの日付は現在varchars(!)です。

擬似コード: リクエストがyesでsalesがyesの場合、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 

私の2番目の質問は、私はすべてのこれらの結果を持っている場合、どのように私が得ることができるということですすべての日付の平均?

+0

平均的な日付はどういう意味ですか?あなたの例では(たとえ「はい」の行だけでなく)平均がどうなるべきかを考慮してもかまいません。 – Aleksej

+0

ご質問ありがとうございます。平均して、私はすべてのdays_between_request_sales日を要約したいと思っていました(要求と販売だけが両方ともyesだったところで)。そして、これを出現回数で割ります。これは1つの数字になります。まだ不明な点がある場合は、お知らせください。 – Veraaa

答えて

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' 
+0

ありがとうございました!これを私のデータセットで試してみると、 'リテラルがフォーマット文字列と一致しません'というエラーが表示されます。日付で何かを変更する必要がありますか? – Veraaa

+0

私はあなたの与えられたデータを使って、あなたにデモを見せました。しかし、最初の記録から、それは問題を引き起こす可能性があります。 '2 feb14'。月と年の間には '12 feb 14'の間にスペースがあるはずです。それを試してください。デモがあなたと協力している場合も試してください – XING

+0

また、2番目の質問はかなり明確ではありませんので、私は答えを投稿しませんでした。あなたが平均したいもののためのいくつかの例を追加 – XING

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' 

これらの結果の数値の平均を計算するには、日をOD 、あなたは単に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' 
+0

downvoteの理由は?何か問題でも? – Aleksej

+0

あなたは他の人がOPが見なかったものを指し示しているとコメントしましたが、あなたは本当にOPの質問を見ましたか?あなたの質問はOpが望むものを与えません。 '要求はyesであり、salesはyesで、sales_dateをrequest_dateから減算します.' ...あなたのクエリは、Opが望む結果を生成しません。 – XING

0

私はそれが前のTO_DATE(SALES_DATE、「DD-MM-YYYY」)と協力してどのように理解していなかったが、あなたのフォーマットはDDです月のYYとして完全に間違っていますAleksejが提案したのは正しいto_date(sales_date、 'dd mon rr')です。彼は1つの条件要求=「はい」を逃した可能性があります。

関連する問題