2017-02-24 12 views
1

SQLクエリ:2つのdateTimesの間の秒数を数えるXQuery式は何ですか?

SELECT 
    ROUND((CAST(DATEATTRIBUTE2 AS DATE) - CAST(DATEATTRIBUTE1 AS DATE)) * 86400) AS result 
FROM TEST_TABLE; 

両方DATEATTRIBUTE1DATEATTRIBUTE2TIMESTAMPタイプのものです。

私が試したし、次ののXQueryが出ている:

fn:days-from-duration(fn:subtract-dateTimes-yielding-dayTimeDuration(
    $P_REQUEST/ns1:DATEATTRIBUTE2,$P_REQUEST/ns1:DATEATTRIBUTE1))*86400 

しかし、日付が同じですが、違いはtime.E.g.であった場合に、これは例のために失敗しましたDATEATTRIBUTE12017-02-23T01:17:18.0000DATEATTRIBUTE2あるときXQueryは助けを事前に0

感謝を返しながら、SQLクエリは2を返し2017-02-23T01:17:20.7550です!

答えて

1

私が正しく理解していれば、2つのdateTimeの間の合計秒数が必要です。あなたは、このようにそれを行うことができます。それらをsubstracting、ある

floor(
    ($P_REQUEST/ns1:DATEATTRIBUTE2 - $P_REQUEST/ns1:DATEATTRIBUTE1) 
    div xs:dayTimeDuration('PT1S') 
) 

- その後、切り捨て、1秒の期間で得られた期間を分割し、その後と - あなたは-演算子を使用することができます。

これは、質問に示された例では2になります。

さらに参照すると、このように示唆されているhereのfunctx関数があります。

+0

これを使ってみましたが、{err} XQ0017: "{http://www.w3.org/2001/XMLSchema}dayTimeDuration":未知の関数(または引数の数が間違っています) – noobCoder

+0

これは、 XQueryのすべてをサポートしていない場合は、Oracle固有のものかもしれません。どのように '' PT1S ''をxs:dayTimeDuration'としてキャストするのですか? xs:dayTimeDurationは実際にはXMLスキーマ1.1(XQuery 1.0も)なので、サポートされていない場合は、xs:duration'または 'xs:duration(" PT1S ")'としてキャストされたPT1Sでもかまいません。 –

+0

こんにちは@Ghislain!最終的にはxs:dayTimeDurationの代わりにxdt:dayTimeDurationを使用して動作し、functxライブラリはかなりクールに見えましたので、OSBはそれをインポートしようとしましたが、OSBは 'XQ0016:module feature not supported(sorry)'エラーを出しました。 – noobCoder

関連する問題