尝试从这个维基百科页面中总结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
为什么我不能转换字符串?
答案 0 :(得分:1)
使用number(translate(xxx, ',', ''))
答案 1 :(得分:0)
问题是你的输出字符串不是实数,因为千位分隔符,
不是XQuery数字的一部分。因此,您必须从字符串中删除分隔符。为此,您可以使用translate()
,因为@MichaelKay正确地建议。
你也可以使用replace()
,两个函数之间的区别在于translate()
只替换单个字符(在这种情况下你只需要它),而replace可以使用正则表达式。但是,我个人觉得替换是一个更合乎逻辑的名称,更容易阅读,所以我个人倾向于不使用translate()
。
此外,如果您的处理器支持XQuery 3.1,您可以使用箭头符号并将其写为:
let $a := substring($z, 2, 10) => replace(",", "")