Как отсортировать строковую дату в marklogic? - PullRequest
0 голосов
/ 18 мая 2018

мы должны отсортировать комбинацию года и месяца в marklogic Ex. "2018 April", "2018 Dec", "2018 Feb", "2018 Nov"

сортировка по алфавиту, но я хочу отсортировать по месяцам и годам.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вам придется нормализовать значения, это точно.Вы можете нормализовать до:

  • xs: date (как и предложил Мартин)
  • или xs: gYearMonth

Вы можете сделать это либо на входеили во время выполнения.

Выполнение этого при загрузке позволяет использовать индексы диапазона MarkLogic для поддержки сортировки, используя, например, cts:index-order в сочетании с cts:search.

Во время выполнения вы также можете привести к xs: date или xs: gYearMonth (после нормализации на лету), но вы также можете просто заказать нормализованные строки напрямую, без приведения.Сортировка и нормализация во время выполнения будут работать хуже и не будут хорошо масштабироваться.

Что касается нормализации, вы можете использовать манипуляции со строками, описанные Мартином, но вы также можете использовать функцию MarkLogic xdmp:parse-dateTime, например что-то вроде этого:

xs:gYearMonth(xdmp:parse-dateTime("[Y] [Mn]", "2018 Jan"))

Требуются дополнительные параметры для указания языка и тому подобное.

HTH!

0 голосов
/ 18 мая 2018

Вы, конечно, можете попытаться преобразовать формат в xs:date и использовать order by например,

let $seq := ("2018 Apr", "2018 Dec", "2018 Feb", "2018 Nov"),
  $month-order := ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
for $date in $seq
order by xs:date(
          substring($date, 1, 4) 
          || '-' 
          ||format-number(index-of($month-order, substring($date, 6, 3)), '00') 
          || '-01')
return $date

дает

"2018 Feb"
"2018 Apr"
"2018 Nov"
"2018 Dec"

Обратите внимание, что я упростил задачу, предположивпоследовательное трехбуквенное название месяца.И я не знаком с конкретным процессором XQuery Marklogic, который вы используете, имеет ли он некоторые пользовательские функции синтаксического анализа даты, которые облегчают задачу, я просто использовал функции и выражения XQuery 3.1.Рабочая демонстрация на https://xqueryfiddle.liberty -development.net / 948Fn59

...