-3

我正在尝试在 XQuery 语句中一起使用substringconcat函数。

这是我所拥有的:

fn:concat(fn:substring({data($x/DueDate)},1,4),fn:substring({data($x/DueDate)},6,2),fn:substring({data($x/(DueDate))},9,2))

我的 xml 中 DueDate 的值是:2013-06-27

我希望上面的函数返回:20130704.

相反,这就是我得到的:

fn:concat(fn:substring(2013-06-27,1,4),fn:substring(2013-06-27,6,2),fn:substring(2013-06-27,9,2))

我很困惑为什么!

4

3 回答 3

3

如果在元素中使用它,则需要用大括号将表达式括起来,例如:

{ 
 fn:concat(
   fn:substring(data($x/DueDate), 1, 4),
   fn:substring(data($x/DueDate), 6, 2),
   fn:substring(data($x/DueDate), 9, 2)
 )
}
于 2013-01-17T14:03:10.847 回答
0

清理你的格式和括号(删除不必要的大括号,删除一些括号),你会得到一些有效的代码:

fn:concat(
  fn:substring(data($x/DueDate), 1, 4),
  fn:substring(data($x/DueDate), 6, 2),
  fn:substring(data($x/DueDate), 9, 2)
)

还有一个更短、更易读的版本:

fn:string-join(fn:tokenize($x/DueDate, '-'))

甚至使用正则表达式替换:

fn:replace($x/DueDate, '-', '')
于 2013-01-17T12:36:26.450 回答
0

你确定你的 DueDate 值实际上是2013-06-27?以下是每个人对子字符串的调用等于:

substring('2013-06-27',1,4)

=>2013

fn:substring('2013-06-27',6,2)

=>06

fn:substring('2013-06-27',9,2)

=> 27

substring()从第二个参数中传递的 1 索引字符数开始,并复制第三个参数中传递的字符数。

于 2013-01-17T03:14:06.333 回答