什么是XQuery表达式来计算两个dateTimes之间的秒数?

时间:2017-02-24 11:48:15

标签: sql oracle xquery

SQL查询:

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

DATEATTRIBUTE1DATEATTRIBUTE2都属于TIMESTAMP类型。

我尝试过并提出以下 XQuery

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

但是,如果日期相同但时间不同,则会失败。例如, DATEATTRIBUTE12017-02-23T01:17:18.0000DATEATTRIBUTE22017-02-23T01:17:20.7550时,SQL查询返回2,而XQuery返回0。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果我正确理解,您需要两个dateTime之间的总秒数。你可以这样做:

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

即减去它们 - 您可以使用-运算符 - 然后将获得的持续时间除以1的持续时间,然后向下舍入。

对于问题中给出的示例,它产生2。

为了进一步参考,有一个functx函数记录here以这种方式建议。