sql - 在 hive 中将年月转换为日期格式
问题描述
我有如下的年月格式。年和月是列名
Year Month
2020 January
2019 October
并希望将它们转换为以下格式
01-01-2020
01-10-2019
我曾尝试与
cast(concat('01-',substring(month,1,3),'-',year) as timestamp) as Date_col
但无法使其工作。非常感谢您的帮助。谢谢!!
解决方案
您正在尝试转换01-Jan-2019
为时间戳,但即使它有效,Hive 中的时间戳也不是必需的格式:dd-MM-yyyy
. 时间戳具有以下格式:('yyyy-MM-dd HH:mm:ss.SSSSSSSSS'
纳秒是可选的)。
unix_timestamp
函数以秒为单位将给定格式字符串转换为 unix 时间戳,from_unix_time
将 unix 时间戳转换为给定格式。
用于from_unixtime(unix_timestamp(concat('01-',month,'-',year),'dd-MMM-yyyy'),'dd-MM-yyyy')
转换'dd-MMM-yyyy'
为'dd-MM-yyyy'
演示:
with
your_data as (
select stack(2,
2020, 'January',
2019, 'October'
) as ( Year, Month)
)
select Year, Month, from_unixtime(unix_timestamp(concat('01-',month,'-',year),'dd-MMM-yyyy'),'dd-MM-yyyy') as Date_col
from your_data
;
结果:
year month date_col
2020 January 01-01-2020
2019 October 01-10-2019
这也将起作用(不与 连接01-
,使用'MMM-yyyy'格式):
from_unixtime(unix_timestamp(concat(month,'-',year),'MMM-yyyy'),'dd-MM-yyyy')
如果要转换为真正的时间戳,请在不指定输出格式的情况下执行相同操作:
from_unixtime(unix_timestamp(concat(month,'-',year),'MMM-yyyy')) --returns 2020-01-01 00:00:00
使用SimpleDateFormat类文档作为格式参考
推荐阅读
- angular - angular-fontawesome fa-layers-counter 颜色变化
- swift - 如何扩展添加计算静态变量的协议
- c# - Intellisense 无法识别数据类型
- html - 为什么标题中的文本没有填满它的框?
- python - 如何迭代 Pandas 中的列值并根据同一行中多个列的值创建新观察值?
- python - 哪种方法更有效,更好地完成这项任务,为什么?请指导
- python - 在python中的给定字符串中反转单词
- r - 使用 R 通过不同的行和列交叉链接值
- r - 如何在r中将日期和时间列拆分为单独的日、月、小时、分钟、秒、星期几列?
- python - 让 Django 仅返回存储为 models.TextField() 的文本的前 50 个字符