xquery substring然后concat

时间:2013-01-17 02:55:43

标签: substring xquery concat

我试图在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))

我很困惑为什么!

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

您确定您的DueDate值实际上是2013-06-27吗?以下是每个单独调用substring的内容:

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索引字符编号开始,并复制第三个参数中传递的字符数。

答案 2 :(得分: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, '-', '')