BigQuery帮助-如何转换并转换为浮点和日期格式

时间:2019-01-18 21:37:30

标签: sql google-bigquery

我正在尝试在BigQuery中做两件事,但是这样做很困难。

我想做两件事:

  1. 将我的日期列转换为日期格式(当前为int64,以43379为例)
  2. 将我的列Delivered_CostActual_Cost更改为float(它们当前为字符串类型)-就像当存在空值时一样,存在-而不是{ {1}}。当您强制转换为0时,这些float会自动更改为-还是我必须先对其进行更新?

我对此没有太多经验,并且在网上寻找解决方案时遇到了困难,因此,我希望获得任何帮助!我在同时投射和显示表中的数据时遇到了困难。

谢谢!

0

2 个答案:

答案 0 :(得分:1)

  
      
  1. 将我的日期列转换为日期格式(当前为int64,以43379为例)
  2.   

使用function PARSE_DATE()

PARSE_DATE(Delivered_Date, '%Y-%m-%d')

following doc列出了受支持的格式。

  
      
  1. 将我的列“ Delivered_Cost”和“ Actual_Cost”浮动(当前为字符串类型)
  2.   

您使用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实际上是从纪元起的几天-从我的观点出发这是最合理的-让我们知道这是否是其他事情,所以我将分别调整答案