我试图在XQuery语句中一起使用substring
和concat
函数。
这就是我所拥有的:
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))
我很困惑为什么!
答案 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, '-', '')