2017-02-24 9 views
1

SQL查詢:什麼是XQuery表達式來計算兩個dateTime之間的秒數?

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.0000DATEATTRIBUTE22017-02-23T01:17:20.7550 XQuery的同時,提前返回0

感謝您的幫助在SQL查詢返回2!

回答

1

如果我正確理解,則需要兩個dateTime之間的總秒數。你可以這樣來做:

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

也就是說,從其減去他們 - 你可以使用-運營商 - 然後用1秒的持續時間將所獲得的持續時間,然後向下舍入。

對於問題中給出的示例,它將產生2。

爲了進一步的參考,有一個函數功能文檔here,暗示這種方式。

+0

嘗試使用此,但它顯示{err} XQ0017:「{http://www.w3.org/2001/XMLSchema}dayTimeDuration」:未知函數(或參數數目(1)錯誤) – noobCoder

+0

這很奇怪,如果它們不支持所有的XQuery,可能特定於Oracle。 「PT1S」如何轉換爲xs:dayTimeDuration'而不是? xs:dayTimeDuration實際上是XML Schema 1.1(也是XQuery 1.0),所以如果它不被支持,可能是''PT1S'轉換爲xs:duration'或'xs:duration(「PT1S」)'? –

+0

Hi @Ghislain!它最終通過使用xdt:dayTimeDuration而不是xs:dayTimeDuration來工作,而functx庫看起來非常酷,所以嘗試導入它,但不幸的是,OSB給出了'XQ0016:模塊功能不支持(遺憾)'錯誤。 – noobCoder

相關問題