【问题标题】:Difference in days between two dates in GraphDBGraphDB 中两个日期之间的天数差异
【发布时间】:2018-09-07 12:02:14
【问题描述】:

我需要一些帮助来使用 Ontotext GraphDB 中的 SPARQL 计算两个日期之间的差异。我知道 SPARQL 协议不支持日期的算术运算,但是一些 SPARQL 引擎支持它。

作为 Fuseki 中的一个例子,我可以做到。

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?duration
WHERE {
  BIND (("2011-02-04T14:45:13.815-05:00"^^xsd:dateTime - "2011-02- 
  02T14:45:13.815-05:00"^^xsd:dateTime) AS ?duration)
}

结果是持续时间:"P2DT0H0M0.000S"^^xsd:duration。然后我可以得到 2 天的 diff,或者 Virtuoso 提供了一个内置函数bif:datediff

我的问题是,GraphDB 上是否有类似的东西可以在没有大的变通方法的情况下解决这个简单的问题。

提前致谢。

【问题讨论】:

  • 对于同一个月内的日期时间,您可以extract天、小时、分钟等并手动执行计算。
  • 您好 Stanislav Kralin,感谢您的帮助。我会将您的第一个回复标记为解决方案。但是,我仍然有同样的问题,因为是一个封闭的网络,无法从运行服务器的 VM 访问 Internet。我不可能使用外部服务。不幸的是,日期不在同一个月内。所以,现在,我将使用 sparql 请求数据,并在后端函数上完成计算和响应。谢谢。
  • 那么接受答案怎么样 :)?

标签: sparql graphdb


【解决方案1】:

这已在8.7.0(9 月 28 日发布)中解决:

GDB-2887 作为 GraphDB 用户,我需要使用 SPARQL 支持 xsd:dateTime 和 xsd:duration 之间的“+”/“-”操作

现在您的查询应该返回"P2DT0H0M0.000S"^^xsd:dateTimeDuration


或者,可以使用基于 Virtuoso、Blazegraph、Fuseki 等的公共端点的联合查询:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX bif: <bif:>
SELECT ?duration1 ?duration2 ?duration3 ?duration4 { 
    VALUES (?start ?end)
        {("2011-02-02T14:45:14"^^xsd:dateTime "2011-02-04T14:45:13"^^xsd:dateTime)}
    SERVICE <http://dbpedia.org/sparql>           #-- Virtuoso
        { BIND ((?end - ?start)/86400.0 AS ?duration1) }
    SERVICE <http://dbpedia.org/sparql>           #-- Virtuoso
        { BIND (bif:datediff("day", ?start, ?end) AS ?duration2) }
    SERVICE <https://query.wikidata.org/sparql>   #-- Blazegraph
        { BIND ((?end - ?start) AS ?duration3) }
    SERVICE <http://zbw.eu/beta/sparql/stw/query> #-- Fuseki
        { BIND (day(?end - ?start) AS ?duration4) }
}

Try on FactForge!

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2013-07-24
    • 2010-12-09
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多