gpt4 book ai didi

sparql - 从 sparql 中的日期时间中删除时间

转载 作者:行者123 更新时间:2023-12-01 04:34:35 24 4
gpt4 key购买 nike

我正在用 SPARQL 编写查询,我想比较没有时间的日期值。目前,我得到一个日期时间值,例如 2014-08-14T13:00:00Z。但是,我想对日期进行过滤,例如

FILTER (?date = "2014-08-15"^^xsd:dateTime)

我是 SPARQL 的新手,所以我需要一些帮助。谢谢。

已编辑


谢谢大家的回复。我为 xsd:dateTime

道歉
FILTER (?date = "2014-08-15"^^xsd:date)

尽管我想要一个“更漂亮”的解决方案,但我还是决定尝试以下方法。

FILTER (?date >= "2014-08-15T00:00:00Z"^^xsd:dateTime && ?date <= "2014-08-15T24:00:00Z"^^xsd:dateTime)

最佳答案

您可以这样做,但不完全按照您的问题提出的方式进行。日期时间的文字形式必须包含所有字段(时区除外),因此 "2014-08-15"^^xsd:dateTime 实际上不是合法的日期时间。参见 the definition有关日期时间格式的更多信息。

就是说,从日期时间中提取年、月和日并将它们重新组合成一个可以与其他日期进行比较的日期非常容易:

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

select ?dt ?date where {
values ?dt { "2011-01-10T14:45:13.815-05:00"^^xsd:dateTime }

bind(xsd:date(concat(str(year(?dt)),"-",
str(month(?dt)),"-",
str(day(?dt))))
as ?date)
}
--------------------------------------------------------------------------
| dt | date |
==========================================================================
| "2011-01-10T14:45:13.815-05:00"^^xsd:dateTime | "2011-01-10"^^xsd:date |
--------------------------------------------------------------------------

如果你想包括时区,你也可以这样做;它们在 xsd:dates 中是允许的。

如果你想在不创建新日期的情况下进行过滤,你也可以这样做

filter (year(?dt) = 2015 &&
month(?dt) = 01 &&
day(?dt) = 10)

这可能是一个相当干净的解决方案。

但请注意关于您的过滤器。您可以像以前一样根据常量过滤变量的值,但这通常(但不总是)建议一种更简单的方法。例如,而不是:

select ?s where {
?s a ?o .
filter ( ?o = <something> )
}

您通常会直接使用值,或使用 来指定变量的值:

select ?s where {
?s a <something> .
}
select ?s where {
values ?o { <something> }
?s a ?o .
}

关于sparql - 从 sparql 中的日期时间中删除时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com