雪花中的查询,
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的两位数世纪开始日期转换问题,但在输入列中有多个日期格式。
您可以使用coalesce
和try_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 |
+-------------------+----------------------------------------------------------------------------------------------+