如何在进行选择查询时将 YYYY-MM-DD HH:mm:ss 中的时间戳转换为 Hive 中的 YYYY-MM-DD HH:mm:ss.SSS?
Posted
技术标签:
【中文标题】如何在进行选择查询时将 YYYY-MM-DD HH:mm:ss 中的时间戳转换为 Hive 中的 YYYY-MM-DD HH:mm:ss.SSS?【英文标题】:How to I convert Timestamp in YYY-MM-DD HH:mm:ss to YYY-MM-DD HH:mm:ss.SSS in Hive while doing a select query? 【发布时间】:2019-12-30 08:58:29 【问题描述】:我正在比较 2 个不同数据库引擎之间的时间戳列,当没有条目时,我需要将存储在 YYY-MM-DD HH:mm:ss
格式的时间戳列检索为 YYY-MM-DD HH:mm:ss.SSS,
,其中 SSS
为 000
。
我可以使用 Hive 选择查询来执行上述操作吗?
【问题讨论】:
【参考方案1】:拆分时间戳以获得毫秒部分,如果根本没有毫秒部分或毫秒部分小于 3 位,则使用 rpad 添加零。
演示:
with your_data as (
select stack(3, '2019-11-02 20:18:00.123',
'2019-11-02 20:18:00.12',
'2019-11-02 20:18:00'
) as ts
)
select concat(split(ts,'\\.')[0],'.',rpad(nvl(split(ts,'\\.')[1],''),3,0))
from your_data d
;
结果:
2019-11-02 20:18:00.123
2019-11-02 20:18:00.120
2019-11-02 20:18:00.000
【讨论】:
如果点后面可能有一些东西,这会更强大,但假设它是全部或全部,一个更简单的解决方案也应该足够了。【参考方案2】:鉴于这两种格式(及其长度)都是严格定义的,您可以使用这个简单的逻辑:
left(concat(ts,'.000'),19)
无法检查确切的语法,但基本上你会附加额外的零并在不需要时将它们切断。
【讨论】:
以上是关于如何在进行选择查询时将 YYYY-MM-DD HH:mm:ss 中的时间戳转换为 Hive 中的 YYYY-MM-DD HH:mm:ss.SSS?的主要内容,如果未能解决你的问题,请参考以下文章
如何从日期格式“yyyy-MM-dd'T'HH:mm:ss.SSSZ”中分别获取日期、年份、小时、分钟?
JS中如何将yyyy-MM-dd HH:mm:ss格式的字符串转成Date类型
如何在linq中设置日期格式“yyyy-MM-dd hh:mm”?