0

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

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

我有一个名为的目标表click,我需要将数据映射到一个名为的列中click_date,其数据类型为bigint.

所以在进行强制转换时会抛出错误

尝试以下:

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

但它不能解决这两种格式。我需要将两种日期格式都转换为整数,以便可以将其加载到目标中。

请注意,目标数据类型不能更改,它是 bigint。Фny 线索将不胜感激。

4

2 回答 2

0

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

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;
于 2020-06-28T14:21:57.967 回答
0

您可以使用date_parse和的组合to_unixtime将 varchar 中的日期转换为 unixtimestamp(它是双精度数据类型)。

日期格式: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'))

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

于 2020-06-26T23:16:26.847 回答