У меня есть график, который я пытаюсь отфильтровать для отчета по дням недели. Например, я хочу найти все случаи, когда они произошли во вторник. Есть ли способ форматировать поле datetime в день недели или фильтровать по дням недели непосредственно в поле datetime?Определение дня недели для даты в SPARQL
ответ
Вы также можете определить день недели в стандартном SPARQL, если вы предоставили немного знаний о фонах. Для запроса требуется контрольная дата, предшествующая вашим датам, и день недели на эту дату.
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")
}
}
SPARQL не имеет функции имени дня, но если конечная точка SPARQL является экземпляром Virtuoso, вы можете использовать его функции SQL. Вот query you can run against DBpedia -
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 -
birthdate dayname
1961-08-04 Friday
Я думаю, это было больше, отсутствие такой функции, которая блокирует вас, чем не зная, как построить свой SPARQL FILTER
?
(ObDisclaimer: OpenLink Software производит Virtuoso, и использует меня.)
Действительно - и поскольку я использую Virtuoso, это также очень полезно! Я глубоко погружаюсь в SPARQL, будучи долгое время пользователем SQL, поэтому все, что я привык делать в SQL/коде, я начинаю понимать в SPARQL. – OpenDataAlex
SPARQL не имеет «день недели» встроенной функции, однако, большинство языков программирования имеют встроенную поддержку для получения дня недели от данного объекта календаря/даты. Например, с помощью Java и RDF4J, вы можете просто извлечь DATETIME буквальный (представлено в виде Literal
объекта с xsd:dateTime
типом данных), преобразовать в календарном объект Java, а затем получить день недели:
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.
Спасибо, Jeen, вот что я думал, но хотел убедиться. :) – OpenDataAlex
Обратите внимание, что этот параметр «язык программирования» выполняет фильтрацию вне механизма базы данных, что может значительно увеличить время обработки, а также объем передаваемых данных , Это может быть целесообразным компромиссом в вашем ближайшем случае, но этого часто не будет. – TallTed
- 1. определение дня недели по номерам
- 2. Конец дня недели для даты в Tableau
- 3. Получение даты первого дня недели
- 4. Формат даты как дня недели
- 5. Определение дня недели с использованием конгруэнции Целлера
- 6. Целое представление для дня недели
- 7. Отображение дня недели От выбора даты
- 8. Получить все даты месяца от дня недели
- 9. PowerShell получает название дня недели с даты
- 10. Название дня недели данной даты-времени-строки
- 11. Python даты и время дня недели STRFTIME() против буднего дня()
- 12. Детерминированная скалярная функция для получения дня недели для даты
- 13. SSRS - название дня недели
- 14. Отображение дня недели в VB
- 15. Что такое HiveQL для получения дня недели?
- 16. Вычислить DateDiff на основе недели даты вместо дня даты
- 17. Получить экземпляр даты для дня недели и времени
- 18. Нужная функция дает DateTime для первого дня недели с учетом номера дня для первого дня недели
- 19. Дата Алгоритм объекта для возвращения даты ближайшего двухнедельного дня недели
- 20. Как получить представление строки дня недели для даты Swift
- 21. SSRS Выражения для конца дня недели
- 22. Определение дня недели с использованием конгруэнции Целлера в Java
- 23. SQL - отображение только даты выходного дня или дня недели в зависимости от даты
- 24. Секунды до указанного дня недели
- 25. распечатка дня недели в Java
- 26. Получите одну букву аббревиатуры от дня недели даты в java
- 27. SQL - определение последнего дня предыдущей недели с гибкостью
- 28. Быстрее способ преобразования даты столбец название дня недели в панд
- 29. Определения дня недели
- 30. Получение локализованного дня недели
Очень удобно - и в конечном итоге это используется, поскольку это стандартный SPARQL :) – OpenDataAlex
Он опирается на стандартный синтаксис, но также и на определенную семантику. Как отмечено в комментарии к запросу, разница в дате возвращает количество дней в Virtuoso, но 'xsd: duration' в Fuseki (а реализации в других магазинах RDF могут отличаться). Это делает запрос специфичным для Virtuoso и аналогичным образом ведет себя в магазинах RDF. –