Xquery 解析日期字符串

Xquery 解析日期字符串,xquery,marklogic,Xquery,Marklogic,我的日期格式为“2014年2月12日”,我需要将其转换为“yyyy-mm-dd”格式。我试过这个: xdmp:parse-dateTime("[D01]-[MN,*-3]-[Y0001]","12-FEB-2014") 但它抛出了一个例外: XDMP-PATTERNVALUEMISMATCH: Given value doesn't match with the specified pattern for parsing dateTime string 看起来,在您拥有的月份中,您将不得不创

我的日期格式为“2014年2月12日”,我需要将其转换为“yyyy-mm-dd”格式。我试过这个:

xdmp:parse-dateTime("[D01]-[MN,*-3]-[Y0001]","12-FEB-2014")
但它抛出了一个例外:

XDMP-PATTERNVALUEMISMATCH: Given value doesn't match with the specified pattern
for parsing dateTime string

看起来,在您拥有的月份中,您将不得不创建自己的转换函数。下面的代码应该给你一个开始。你给我们的例子会成功的

declare function local:month-name-to-int
  ( $stringIN as xs:string? )  as xs:string? {
   switch (fn:lower-case($stringIN))
   case "jan" return "01"
   case "feb" return "02"
   case "mar" return "03"
   case "apr" return "04"
   case "may" return "05"
   case "jun" return "06"
   case "jul" return "07"
   case "aug" return "08"
   case "sep" return "09"
   case "oct" return "10"
   case "nov" return "11"
   case "dec" return "12"
   default return fn:error(xs:QName("ERROR"), "unknown month")
 } ;

let $string := "12-FEb-2014"
let $stringTokened := fn:tokenize($string, "-")
return xs:date($stringTokened[3] || "-"||local:month-name-to-int($stringTokened[2]) || "-" || $stringTokened[1])

看起来,在您拥有的月份中,您将不得不创建自己的转换函数。下面的代码应该给你一个开始。你给我们的例子会成功的

declare function local:month-name-to-int
  ( $stringIN as xs:string? )  as xs:string? {
   switch (fn:lower-case($stringIN))
   case "jan" return "01"
   case "feb" return "02"
   case "mar" return "03"
   case "apr" return "04"
   case "may" return "05"
   case "jun" return "06"
   case "jul" return "07"
   case "aug" return "08"
   case "sep" return "09"
   case "oct" return "10"
   case "nov" return "11"
   case "dec" return "12"
   default return fn:error(xs:QName("ERROR"), "unknown month")
 } ;

let $string := "12-FEb-2014"
let $stringTokened := fn:tokenize($string, "-")
return xs:date($stringTokened[3] || "-"||local:month-name-to-int($stringTokened[2]) || "-" || $stringTokened[1])

看起来,在您拥有的月份中,您将不得不创建自己的转换函数。下面的代码应该给你一个开始。你给我们的例子会成功的

declare function local:month-name-to-int
  ( $stringIN as xs:string? )  as xs:string? {
   switch (fn:lower-case($stringIN))
   case "jan" return "01"
   case "feb" return "02"
   case "mar" return "03"
   case "apr" return "04"
   case "may" return "05"
   case "jun" return "06"
   case "jul" return "07"
   case "aug" return "08"
   case "sep" return "09"
   case "oct" return "10"
   case "nov" return "11"
   case "dec" return "12"
   default return fn:error(xs:QName("ERROR"), "unknown month")
 } ;

let $string := "12-FEb-2014"
let $stringTokened := fn:tokenize($string, "-")
return xs:date($stringTokened[3] || "-"||local:month-name-to-int($stringTokened[2]) || "-" || $stringTokened[1])

看起来,在您拥有的月份中,您将不得不创建自己的转换函数。下面的代码应该给你一个开始。你给我们的例子会成功的

declare function local:month-name-to-int
  ( $stringIN as xs:string? )  as xs:string? {
   switch (fn:lower-case($stringIN))
   case "jan" return "01"
   case "feb" return "02"
   case "mar" return "03"
   case "apr" return "04"
   case "may" return "05"
   case "jun" return "06"
   case "jul" return "07"
   case "aug" return "08"
   case "sep" return "09"
   case "oct" return "10"
   case "nov" return "11"
   case "dec" return "12"
   default return fn:error(xs:QName("ERROR"), "unknown month")
 } ;

let $string := "12-FEb-2014"
let $stringTokened := fn:tokenize($string, "-")
return xs:date($stringTokened[3] || "-"||local:month-name-to-int($stringTokened[2]) || "-" || $stringTokened[1])

现在函数xdmp:parse dateTime[D01]-[MN,*-3]-[Y0001],2014年2月12日似乎可以使用现在函数xdmp:parse dateTime[D01]-[MN,*-3]-[Y0001],2014年2月12日似乎可以使用现在函数xdmp:parse dateTime[D01]-[MN,*-3]-[Y0001],2014年2月12日似乎可以使用现在函数xdmp:parse dateTime[D01]-[MN,*-3]-[Y0001],2014年2月12日似乎与gud合作