我从数据库中检索日期并使用sed对其进行格式化,以便与另一个数据库中的其他日期进行比较。
这两个数据库不同(mssql和hive)。
mssql中的日期格式如下:
sed "s/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)\ \([0-9]\{2\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)\.\([0-9]\{3\}\)/\1-\2-\3 \4:\5:\6/g")
然而,我不知道如何做它的日期从Hive。
目标输出为:yyyy-mm-dd hh:mm:ss
Hive的输入是 YYYY-MM-dd HH:mm:ss.S
或者 YYYY-MM-dd HH:mm:ss.SS
或者 YYYY-MM-dd HH:mm:ss.SSS
.
这是由于配置单元在插入过程中忽略了毫秒内的0位数字。
例如: YYYY-MM-dd HH:mm:ss.XX0
将成为 YYYY-MM-dd HH:mm:ss.XX
在Hive里 YYYY-MM-dd HH:mm:ss.X00
将成为 YYYY-MM-dd HH:mm:ss.X
在Hive里 YYYY-MM-dd HH:mm:ss.000
将成为 YYYY-MM-dd HH:mm:ss.0
在Hive里
是否有一个sed命令可以处理所有这些情况,或者应该使用其他解决方案?
1条答案
按热度按时间xnifntxz1#
你可以替换
\.\([0-9]\{3\}\)
与\.\([0-9]\{1,3\}\)
:在线查看
sed
演示。关键是您的原始regex在末尾匹配了三个数字(因此,需要三毫秒才能出现在末尾)。与
\{1,3\}
,则需要有一个、两个或三个数字。