Я использую Tarql для преобразования некоторых данных CSV в rdf. CSV содержит столбец дат в формате «21.09.2017, 12:15:00».
Я использую приведенное ниже предложение SPARQL where для преобразования даты в этом столбце в допустимый формат xsd: DateTime.
SELECT ?date
WHERE {
BIND ("([0-9][0-9]?)/([0-9][0-9]?)/([0-9][0-9][0-9][0-9])\\s*([0-9][0-9]):([0-9][0-9]):([0-9][0-9])\\s*([A-Z][A-Z])" AS ?DateRegex)
BIND (REPLACE(?Date, ?DateRegex, "$1") AS ?month)
BIND (REPLACE(?Date, ?DateRegex, "$2") AS ?day)
BIND (REPLACE(?Date, ?DateRegex, "$3") AS ?year)
BIND (REPLACE(?Date, ?DateRegex, "$4") AS ?hours)
BIND (REPLACE(?Date, ?DateRegex, "$5") AS ?mins)
BIND (REPLACE(?Date, ?DateRegex, "$6") AS ?sec)
BIND (REPLACE(?Date, ?DateRegex, "$7") AS ?clockPeriod)
BIND (STRDT(CONCAT(?year, "-", ?month, "-", ?day, "T", IF(?clockPeriod = "PM", IF(?hours >= 1 && ?hours < 12, xsd:string(xsd:integer(?hours) + 12), ?hours), IF(?hours = 12, "00" , ?hours)), ":", ?mins, ":" , ?sec), xsd:dateTime) AS ?date)
}
Это прекрасно работает, когда часы не требуют смены из-за смены часов с 12 часов на 24 часа, но дата не генерируется, когда часы нужно менять. Я предполагаю, что что-то не так в последнем предложении с IF.
Кто-нибудь может указать, в чем может быть проблема?