如何处理同一列中多个日期格式的雪花to_date强制转换问题?



雪花中的查询,

select date_column, try_to_date(date_column) 
from tablename;

往往会弄乱预期的日期,如下所示:

01-NOV-18 ____________ 0018-11-01  (desired output 2018-11-01)
09-JAN-19 ____________ 0019-01-09  
2018-11-03 20:44:54 __ 2018-11-03
2018-09-03 00:00:00 __ 2018-09-03
2018-08-22 19:38:41 __ 2018-08-22

这类似于Snowsql的两位数世纪开始日期转换问题,但在输入列中有多个日期格式。

您可以使用coalescetry_to_date。关键是在try_to_date函数中特别放置日期格式,以便如果它不能转换与格式不匹配的日期,则返回null。当日期与格式不匹配时,它将返回到您指定的下一个方法,您可以继续,直到涵盖所有不同的日期格式。试试这样写:

select 
date_column, 
coalesce(try_to_date(date_column, 'YYYY-MM-DD HH:MI:SS'), try_to_date(date_column, 'DD-MON-YY'))
from tablename;

这回报:

+-------------------+----------------------------------------------------------------------------------------------+
|INPUT_DATE         |COALESCE(TRY_TO_DATE(INPUT_DATE, 'YYYY-MM-DD HH:MI:SS'), TRY_TO_DATE(INPUT_DATE, 'DD-MON-YY'))|
+-------------------+----------------------------------------------------------------------------------------------+
|01-NOV-18          |2018-11-01                                                                                    |
|09-JAN-19          |2019-01-09                                                                                    |
|2018-11-03 20:44:54|2018-11-03                                                                                    |
|2018-09-03 00:00:00|2018-09-03                                                                                    |
|2018-08-22 19:38:41|2018-08-22                                                                                    |
+-------------------+----------------------------------------------------------------------------------------------+

最新更新