sql—将timestamp/varchar列转换为包含两种不同日期格式的presto中的bigint

aiqt4smr  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(440)

我有一个源表 click 列名为 click_date 其数据类型为 varchar ,它在同一列中包含具有两种不同日期格式的值。例如:

Jul 17 2018 4:54PM
2019-02-05 08:20:29.000

我有一个名为 click 我需要把数据Map到一个名为 click_date 其数据类型为 bigint .
所以它在进行铸造时抛出了一个错误
尝试了以下操作:

td_time_parse(cast(cast(click_date as timestamp)as varchar))

但它不能同时解决这两种格式。。我需要将这两种日期格式都转换为整数,以便可以将其加载到目标中。
请注意,不能更改目标数据类型,它是bigint。ф任何线索将不胜感激。

vhipe2zx

vhipe2zx1#

您可以使用下面的查询用一个表达式处理两种日期格式。它本质上看日期/时间戳是否以数字开头。

select 
if(click_date rlike '^[0-9]', unix_timestamp(click_date ,'yyyy-MM-dd HH:mm:ss'), unix_timestamp(click_date,'MMM dd yyyy')) as click_date_mod 
from click;
7bsow1i6

7bsow1i62#

你可以用 date_parse 以及 to_unixtime 将varchar中的日期转换为unixtimestamp(采用double数据类型)。
日期格式:2019-02-05 08:20:29.000

to_unixtime(date_parse('2019-02-05 08:20:29.000','%Y-%m-%d %h:%i:%s'))

日期格式:2018年7月17日

to_unixtime(date_parse('Jul 17 2018','%b %d %Y'))

这将返回日期的双数据类型,您可以将其存储在数据库中。

相关问题