大查询中的CAST和REPLACE

时间:2019-01-24 07:11:37

标签: google-bigquery

我在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;

enter image description here

2 个答案:

答案 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`