Google bigquery 如何在BigQuery中将日期和时间戳字符串类型转换为日期类型

Google bigquery 如何在BigQuery中将日期和时间戳字符串类型转换为日期类型,google-bigquery,Google Bigquery,我有一个临时表,其中输入日期和输入时间戳总是字符串类型。我想看看是否有一个函数可以处理这两种类型,并以yyyy-MM-dd格式在输出中给我一个日期 这是我的密码- with temp as ( select "1" as id , "20170801" as input_date_string -- this is of string type , "2017-08-01 15:30:00" as input_timestamp_string -- this is also of stri

我有一个临时表,其中输入日期和输入时间戳总是字符串类型。我想看看是否有一个函数可以处理这两种类型,并以yyyy-MM-dd格式在输出中给我一个日期

这是我的密码-

with temp as 
(
select "1" as id
,  "20170801" as input_date_string -- this is of string type
,  "2017-08-01 15:30:00" as input_timestamp_string -- this is also of string type
)

select id
, input_date_string
, input_timestamp_string
, FORMAT_DATE( '%Y-%m-%d' ,  PARSE_DATE('%Y%m%d', input_date_string) ) AS output_format_date
from temp
我能够格式化输入的日期字符串。但我希望能够处理这两种类型-日期和时间戳字符串。在输出中是否有一个单独的功能可以为我提供2017-08-01

再次重申,输入可以是20170801或2017-08-01 15:30:00,我的函数应该返回我2017-08-01。

您可以合并安全。添加前缀并合并以执行此操作:

with temp as 
(
select "1" as id, "20170801" as input_date_string 
union all
select "2", "2017-08-01 15:30:00"
)

select id
, COALESCE(
  FORMAT_DATE( '%Y-%m-%d' ,  SAFE.PARSE_DATE('%Y%m%d', input_date_string) ),
  FORMAT_DATETIME( '%Y-%m-%d' ,  SAFE.PARSE_DATETIME('%Y-%m-%d %H:%M:%S', input_date_string) )
  ) result_date
from temp
输出:

+----+------------+
| id |result_date |
+----+------------+
| 1  | 2017-08-01 |
| 2  | 2017-08-01 |
+----+------------+

BigQuery标准SQL的以下选项

#standardSQL
CREATE TEMP FUNCTION CUSTOM_FORMAT_DATE(str STRING) AS (
  CASE 
    WHEN LENGTH(str) = 8 THEN FORMAT_DATE('%Y-%m-%d', PARSE_DATE('%Y%m%d', str))
    ELSE FORMAT_DATE('%Y-%m-%d', DATE(TIMESTAMP(str)))
  END
);
WITH temp AS 
(
SELECT "1" AS id
,  "20170801" AS input_date_string -- this is of string type
,  "2017-08-01 15:30:00" AS input_timestamp_string -- this is also of string type
)

SELECT id
, input_date_string
, input_timestamp_string
, CUSTOM_FORMAT_DATE(input_date_string)
, CUSTOM_FORMAT_DATE(input_timestamp_string)
FROM temp  
有输出

Row id  input_date_string   input_timestamp_string  f0_         f1_  
1   1   20170801            2017-08-01 15:30:00     2017-08-01  2017-08-01   

谢谢你的接受。请考虑投票,这在这点上同样重要。