我試圖在使用 BigQuery 將它們轉換為 float64 之前從某些字符之間提取數字作為子字串,但我收到了某些值的錯誤雙值錯誤。我嘗試使用 safe_cast 來確定哪些值導致錯誤,它們回傳為 null(如預期),但我似乎無法弄清楚為什么這些值不能被轉換為 float64,因為它們實際上是數字。與例外的唯一共同點是連續提取的第一個數字是 0,但還有其他值可以做到這一點并且可以很好地投射。
這是號碼從提取的字串的一個例子:AOS-1545902(NCP)*0@84?#475其被object_text存盤于命名表tr。所以在這種情況下,提取的第一個數字是 '*' 和 '@' 之間的 0,第二個是 '@' 和 '#' 之間的 84,最后一個是 '#' 之后的 475 .
這是我用來提取數字并將它們轉換為 float64 的查詢:
cast(substr(tr.object_text, strpos(tr.object_text,'*') 1, (strpos(tr.object_text,'@')-(strpos(tr.object_text,'*') 1))) as float64) AS FP_Share,
safe_cast(substr(tr.object_text, strpos(tr.object_text,'@') 1, (strpos(tr.object_text,'#')-(strpos(tr.object_text,'@') 1))) as float64) AS V_Share,
cast(substr(tr.object_text, strpos(tr.object_text,'#') 1) as float64) as Cust_Price,
從這些中,V_Share('@' 和 '#' 之間的數字)是具有這些例外的那個,當我使用以下查詢提取數字而不將其轉換為 float64 時:
substr(tr.object_text, strpos(tr.object_text,'@') 1, (strpos(tr.object_text,'#')-(strpos(tr.object_text,'@') 1))) AS noCast_V_Share,
您可以在下面的代碼段中看到總共 8 個這些例外:結果代碼段
希望有人能幫我解決這個問題!
uj5u.com熱心網友回復:
由于您似乎有無法列印的字符導致提取問題,因此您可以使用REGEXP_EXTRACT僅提取應該導致有效轉換的數字(如果需要,可能還有句點),例如;
CAST(
REGEXP_EXTRACT(
SUBSTR(tr.object_text,
STRPOS(tr.object_text,'@') 1,
(STRPOS(tr.object_text,'#')-(STRPOS(tr.object_text,'@') 1))),
'[0-9.] '
) AS FLOAT64
) AS V_Share
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359847.html
下一篇:確定每種產品的當前價格
