首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SPARQL中确定Datetime的星期几

问在SPARQL中确定Datetime的星期几
EN

Stack Overflow用户
提问于 2017-01-19 04:51:06
回答 7查看 1K关注 0票数 2

我有一个图表,我正在尝试按星期几筛选报告。例如,我希望找到它们发生在星期二的所有实例。有没有一种方法可以将日期时间字段格式化为星期几,或者直接在日期时间字段上按星期几过滤?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-01-21 22:48:51

如果您提供了一些背景知识,还可以在标准SPARQL中确定星期几。查询需要引用日期在您的日期和此日期的星期几之前。

代码语言:javascript
复制
PREFIX xsd:  <http://www.w3.org/2001/XMLSchema#>

SELECT ?date ?dayName
WHERE {
  # Sample dates
  VALUES ?date {
    "1961-08-04"^^xsd:date
    "1986-04-03"^^xsd:date
  }
  # Compute days since a reference date
  # This works in Virtuoso, which returns the difference in days.
  # For example, Fuseki returns xsd:duration instead.
  BIND (?date - "1900-01-01"^^xsd:date AS ?days)
  # Compute modulo by 7 without a modulo operator
  BIND (floor(?days - (7 * floor(?days/7))) AS ?mod)
  VALUES (?mod ?dayName) {
         (0    "Monday") # 1900-01-01 was Monday
         (6    "Tuesday")
         (5    "Wednesday")
         (4    "Thursday")
         (3    "Friday")
         (2    "Saturday")
         (1    "Sunday")
  }
}
票数 6
EN

Stack Overflow用户

发布于 2017-01-19 05:42:49

SPARQL没有内置的“星期几”函数,但是,大多数编程语言都内置了对从给定的日历/日期对象中检索星期几的支持。例如,使用Java和RDF4J,您可以简单地检索dateTime文字(表示为具有xsd:dateTime数据类型的Literal对象),转换为Java日历对象,然后检索工作日:

代码语言:javascript
复制
Literal value = ... ; // the RDF4J literal value from your query result
Calendar calendar = value.calendarValue().toGregorianCalendar(); 
int weekday = calendar.get(Calendar.DAY_OF_WEEK);

此外,大多数SPARQL引擎都提供了添加自定义函数的选项。

因此,您可以只检索dateTime并对结果进行后处理以获得星期几,也可以实际创建一个自定义函数并将其添加到您的SPARQL引擎中。这里有一个关于how to add a custom function to SPARQL using Sesame/RDF4J的教程。

票数 5
EN

Stack Overflow用户

发布于 2017-01-19 05:28:12

SPARQL没有日期名称函数,但是如果您的SPARQL端点是一个Virtuoso实例,那么您可以利用它的SQL函数。这是一个query you can run against DBpedia --

代码语言:javascript
复制
SELECT
                                   ?birthdate 
    ( bif:dayname(?birthdate)  AS  ?dayname )
WHERE
   {  <http://dbpedia.org/resource/Barack_Obama>
         <http://dbpedia.org/ontology/birthDate>  ?birthdate 
   }

--这将会得到Barack Obama's birthdate and day --

代码语言:javascript
复制
birthdate    dayname
1961-08-04   Friday

我认为与其说是不知道如何构建SPARQL FILTER,不如说是因为缺少这样的函数

(ObDisclaimer:OpenLink Software生产Virtuoso,雇佣我。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41729208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档