2017-03-01 25 views
2

試圖從這個維基百科頁面總結從頂部NBA球員的總收入在2012 - 2013年:https://en.wikipedia.org/wiki/Highest-paid_NBA_players_by_season的XQuery - 使用SUM()返回NaN字符串值

這裏是我的代碼:

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的一種整列。

當我只用數()轉換之前返回$一個,輸出看起來是這樣的:

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 

爲什麼我不能轉換的字符串?

回答

1

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

0

的問題是,你的輸出字符串不是實數,因爲千個分隔符,不是一個XQuery號碼的一部分。所以你必須從字符串中刪除分隔符。爲此,您可以使用translate()作爲@MichaelKay正確的建議。

你也可以使用replace(),這兩個函數的區別在於translate()只替換單個字符(這是你在這種情況下需要的),替換可以使用正則表達式。不過,我個人覺得替換是一個更合乎邏輯的名稱,更易於閱讀,所以我個人傾向於不使用translate()

另外,如果您的處理器支持的XQuery 3.1,你可以使用箭頭符號,並寫這樣的:

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