XQuery - 使用sum()为字符串值返回NaN

时间:2017-03-01 23:18:41

标签: string sum xquery nan

尝试从这个维基百科页面中总结2012-2013顶级NBA球员的总收入:https://en.wikipedia.org/wiki/Highest-paid_NBA_players_by_season

这是我的代码:

sum(
let $doc := doc("NBApaid.xml")//table
for $x in $doc
where $x/tr/td/h2/span/@id ="2012.E2.80.932013"
for $y in $x/tr/td
where $y/h2/span = "2012–2013"
for $z in $y//td
where starts-with($z,"$")
let $a := substring($z, 2,10)
return number($a)
)

输出是:

NaN

这里的问题是number($a)返回整列NaN。

当我在使用number()转换它之前只返回$​​ a时,输出如下所示:

30,453,805
20,907,128
19,948,799
19,752,645
19,444,503
19,285,850
19,067,500
19,067,500
18,673,000
18,668,431

为什么我不能转换字符串?

2 个答案:

答案 0 :(得分:1)

使用number(translate(xxx, ',', ''))

答案 1 :(得分:0)

问题是你的输出字符串不是实数,因为千位分隔符,不是XQuery数字的一部分。因此,您必须从字符串中删除分隔符。为此,您可以使用translate(),因为@MichaelKay正确地建议。

你也可以使用replace(),两个函数之间的区别在于translate()只替换单个字符(在这种情况下你只需要它),而replace可以使用正则表达式。但是,我个人觉得替换是一个更合乎逻辑的名称,更容易阅读,所以我个人倾向于不使用translate()

此外,如果您的处理器支持XQuery 3.1,您可以使用箭头符号并将其写为:

let $a := substring($z, 2, 10) => replace(",", "")