What is the function to calculate difference between two SPARQL xsd:dateTime ?
I have found a reference to datediff, but this is not working. Does such a built in function exist in SPARQL as it does with most other query languages?
一些 SPARQL 引擎可能直接支持日期算术。例如,正如answers.semanticweb.com question and answer中提到的,Jena 支持日期算术,您可以从另一个日期中减去一个日期并获得 xsd:Duration。其他实现可能支持 datediff 函数。例如,这个 Virtuoso 示例包括使用 bif:datediff。但是,这些是扩展,并不保证会出现在任何特定的 SPARQL 实现中。
对于更便携但可能效率较低的解决方案,您可以使用年份从日期时间中提取年份部分。例如,这可以让你做,
select ?age where {
bind( "1799-12-14"^^<http://www.w3.org/2001/XMLSchema#date> as ?death )
bind( "1732-02-22"^^<http://www.w3.org/2001/XMLSchema#date> as ?birth )
bind( year(?death)-year(?birth) as ?age )
}
并得到结果
-------
| age |
=======
| 67 |
-------
我在搜索如何在 SPARQL 中计算年龄时发现了这篇文章。感谢 Joshua Taylor 提供正确的提示。但是,我通过添加调整来改进代码段,因此如果该人在他们去世的那一年没有过生日,则它不会减少一年。我认为它可能对某些人有用,他们在搜索主题时会发现这篇文章,就像我一样:
select ?age where {
bind( "1799-12-14"^^<http://www.w3.org/2001/XMLSchema#date> as ?death )
bind( "1732-02-22"^^<http://www.w3.org/2001/XMLSchema#date> as ?birth )
bind( year(?death) - year(?birth) - if(month(?death)<month(?birth) || (month(?death)=month(?birth) && day(?death)<day(?birth)),1,0) as ?age )
}