如何使用Big Query将任何类型的日期格式和日期时间格式转换为特定的日期格式?

How to convert any type of date format and datetime format into a particular date format using Big Query?

提问人:data en 提问时间:9/29/2023 最后编辑:data en 更新时间:9/29/2023 访问量:97

问:

我有一个具有不同日期格式和日期时间格式的日期列。现在,我想将格式转换为 .我用了.虽然它能够转换所有内容,但在日期时间格式(如 .如何在大查询中查询,以便更新语句可以转换任何类型的日期格式和日期时间格式?dd-mm-yyyyTIMESTAMP_DIFF,PARSE_TIMESTAMP,FORMAT_TIMESTAMP and FORMAT_DATEdd/mm/yy HH:MM

    data:-
0           21/12/2006
1           25/01/2007
2           20/02/2023
3           1996.12.25
4           24/12/2020
5           24/12/2020
6     24/05/2020 12:02
7     24/05/2020 12:02
8     24/05/2020 12:02
9     24/05/2020 12:02
10          20/02/2023
11          21/02/2023
12          22/02/2023
13          23/02/2023
14          24/02/2023
15          25/02/2023
16          26/02/2023
17          02/12/2020
18          02/23/2020
19          09/23/2020
Name: Date, dtype: object
Big query:-
UPDATE table_name
SET
   Date = CASE
    WHEN TIMESTAMP_DIFF(PARSE_TIMESTAMP('%d/%m/%Y', Date), TIMESTAMP_TRUNC(PARSE_TIMESTAMP('%d/%m/%Y', Date), DAY), SECOND) > 0 THEN
      FORMAT_TIMESTAMP('%d%m%y', PARSE_TIMESTAMP('%d/%m/%Y', Date))
    ELSE
      FORMAT_DATE('%d%m%y', PARSE_DATE('%d/%m/%Y', Date))
  END
WHERE TRUE;

Error:
Failed to parse input string "24/05/2020 12:02"
日期时间 google-cloud-platform google-bigquery datetime 格式日期时间

评论

0赞 kiran mathew 9/29/2023
嗨@data en,我已经发布了答案。我希望它能帮助你。如果有帮助,请考虑投赞成票并接受,否则请告诉我,以便我改进我的答案。如果您想要完整的查询(更新查询+案例查询),请告诉我。

答:

1赞 kiran mathew 9/29/2023 #1

您遇到的错误是因为PARSE_TIMESTAMP无法识别输入的格式。要解决此错误,您可以考虑在案例查询中使用“regex”或“SAFE”关键字。“SAFE”关键字在看到错误数据或数据不是预期的转换格式时返回 NULL。

例:

select
CASE
    WHEN SAFE.PARSE_TIMESTAMP('%d/%m/%Y', Dates) IS NOT NULL THEN
      FORMAT_TIMESTAMP('%d/%m/%Y', SAFE.PARSE_TIMESTAMP('%d/%m/%Y', Dates))
    WHEN SAFE.PARSE_TIMESTAMP('%Y.%m.%d', Dates) IS NOT NULL THEN
      FORMAT_TIMESTAMP('%d/%m/%Y', SAFE.PARSE_TIMESTAMP('%Y.%m.%d', Dates))
    WHEN SAFE.PARSE_TIMESTAMP('%d/%m/%Y %H:%M', Dates) IS NOT NULL THEN
      FORMAT_TIMESTAMP('%d/%m/%Y', SAFE.PARSE_TIMESTAMP('%d/%m/%Y %H:%M', Dates))
    ELSE   ---Add more when statement to match more date value
      NULL  
  END from t1;

结果:

image

有关更多信息,您可以参考这些链接 1link2