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

问题描述 投票:0回答:1

我有一个具有不同日期格式和日期时间格式的日期列。现在,我想将格式转换为

dd-mm-yyyy
。我用过
TIMESTAMP_DIFF,PARSE_TIMESTAMP,FORMAT_TIMESTAMP and FORMAT_DATE
。虽然它能够转换所有内容,但会在日期时间格式(如
dd/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"
datetime google-cloud-platform google-bigquery datetime-format formatdatetime
1个回答
0
投票

您遇到的错误是因为 PARSE_TIMESTAMP 无法识别输入的格式。要解决此错误,您可以考虑在案例查询中使用正则表达式或“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 case statement to match more date value NULL END from t1;

结果:

image

欲了解更多信息,您可以参考这些link1link2

© www.soinside.com 2019 - 2024. All rights reserved.