我有一个具有不同日期格式和日期时间格式的日期列。现在,我想将格式转换为
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"
您遇到的错误是因为 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;
结果: