我在BigQuery的表格中有一个名为Delivered_Cost的列。对于没有成本的行,它带有“-”。我想将其替换为0,然后将该列强制转换为float,以便对其进行一些聚合。但是,当我使用下面的代码时,遇到了问题。即使某些行具有针对它们的值,它们也会变为null。如何编辑下面的代码,以便可以替换并强制转换为同一查询?
SQL代码
SELECT Delivered_Cost,
REPLACE(Consideration_Set,“ 0”,“未定义”)作为Final_Consideration_Set, CAST(REPLACE(DELIVERED_COST,“-”,“ 0”)以float形式)作为Final_Delivered,
从 [表]
限制100;
答案 0 :(得分:3)
看起来您正在基于中的表引用使用旧版SQL。 转到“选项”,然后取消选中“使用旧版SQL”的选项
请参阅下面包含的SQL。它对我有用。
WITH table AS (
SELECT
'100.01' AS delivered_cost
, 'News' AS consideration_set
UNION ALL
SELECT
'-' AS delivered_cost
, '0' AS consideration_set
)
SELECT
delivered_cost
, REPLACE(consideration_set, '0', 'undefined') final_consideration_set
, SAFE_CAST(REPLACE(delivered_cost, '-', '0') AS FLOAT64) final_delivered_cost
FROM table
答案 1 :(得分:3)
这里的问题是数据中的千位分隔符(逗号)。您可以通过以下方式更改查询来解决此问题(删除逗号):
SELECT
delivered_cost,
REPLACE(Consideration_Set, '0', 'undefined') Final_Consideration_Set,
CAST(REPLACE(REPLACE(DELIVERED_COST, ',',''), '-', '0') AS FLOAT) Final_Delivered
FROM [table]
此外,建议在BigQuery中使用标准SQL,而不要使用旧版SQL。您查询的标准SQL版本是:
#standardSQL
SELECT
delivered_cost,
REPLACE(Consideration_Set, '0', 'undefined') Final_Consideration_Set,
SAFE_CAST(REPLACE(REPLACE(DELIVERED_COST, ',',''), '-', '0') AS FLOAT64) Final_Delivered
FROM `table`