Google bigquery 如何在BigQuery中将日期和时间戳字符串类型转换为日期类型
我有一个临时表,其中输入日期和输入时间戳总是字符串类型。我想看看是否有一个函数可以处理这两种类型,并以yyyy-MM-dd格式在输出中给我一个日期 这是我的密码-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
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
谢谢你的接受。请考虑投票,这在这点上同样重要。