我正在尝试在BigQuery中做两件事,但是这样做很困难。
我想做两件事:
int64
,以43379
为例)Delivered_Cost
和Actual_Cost
更改为float
(它们当前为字符串类型)-就像当存在空值时一样,存在-
而不是{ {1}}。当您强制转换为0
时,这些float
会自动更改为-
还是我必须先对其进行更新?我对此没有太多经验,并且在网上寻找解决方案时遇到了困难,因此,我希望获得任何帮助!我在同时投射和显示表中的数据时遇到了困难。
谢谢!
0
答案 0 :(得分:1)
- 将我的日期列转换为日期格式(当前为int64,以43379为例)
PARSE_DATE(Delivered_Date, '%Y-%m-%d')
following doc列出了受支持的格式。
- 将我的列“ Delivered_Cost”和“ Actual_Cost”浮动(当前为字符串类型)
您使用CASE()
的语法可以;您还可以使用快捷方式FLOAT()
。但是,如果您的字符串未成功映射到浮点数(仅类似于-
),则会发生运行时错误。您可以使用SAFE_CAST()
来忽略转换错误,但这也可能导致忽略相关的错误。因此,您最好使用REPLACE()
。
这是您的查询:
SELECT
PARSE_DATE(Delivered_Date, '%Y-%m-%d') AS Delivered_Date,
FLOAT(REPLACE(Delivered_Cost, '-', '0')) AS Delivered_Cost,
FLOAT(REPLACE(Actual_Cost, '-', '0')) AS Actual_Cost
FROM MYTABLE
FLOAT(Delivered_Cost)
答案 1 :(得分:0)
以下是用于BigQuery标准SQL
#standardSQL
SELECT
DATE_FROM_UNIX_DATE(date_column_as_number_of_days_since_epoch) date_since_epoch,
IFNULL(SAFE_CAST(Delivered_Cost AS FLOAT64), 0.0) AS Delivered_Cost,
IFNULL(SAFE_CAST(Actual_Cost AS FLOAT64), 0.0) AS Actual_Cost
FROM `project.dataset.table`
您可以使用以下哑数据测试,玩游戏
#standardSQL
WITH `project.dataset.table` AS (
SELECT
43397 AS date_column_as_number_of_days_since_epoch,
'123' AS Delivered_Cost,
' - ' AS Actual_Cost
)
SELECT
DATE_FROM_UNIX_DATE(date_column_as_number_of_days_since_epoch) date_since_epoch,
IFNULL(SAFE_CAST(Delivered_Cost AS FLOAT64), 0.0) AS Delivered_Cost,
IFNULL(SAFE_CAST(Actual_Cost AS FLOAT64), 0.0) AS Actual_Cost
FROM `project.dataset.table`
结果为
Row date_since_epoch Delivered_Cost Actual_Cost
1 2088-10-25 123.0 0.0
注意:我假设您在问题中用作示例的43379
实际上是从纪元起的几天-从我的观点出发这是最合理的-让我们知道这是否是其他事情,所以我将分别调整答案