Hive查询:将'4/12/2023 15:37'格式时间转为2023-12-04(to_date返回空值)
解决Hive中自定义日期格式转换为空的问题
问题原因
to_date()函数默认仅能识别yyyy-MM-dd或yyyy-MM-dd HH:mm:ss格式的字符串,而你的日期字符串是dd/MM/yyyy HH:mm(如4/12/2023 15:37),格式不匹配导致返回空值。
解决方案
需要指定原字符串的格式进行解析,再转换为目标日期格式,以下两种方法均可实现:
方法1:unix_timestamp + from_unixtime组合
先通过unix_timestamp指定原格式解析字符串得到时间戳,再用from_unixtime转换为目标日期格式:
-- 测试单个值 SELECT from_unixtime(unix_timestamp('4/12/2023 15:37', 'd/MM/yyyy HH:mm'), 'yyyy-MM-dd') AS target_date; -- 针对列查询(替换datetime_col和your_table为实际名称) SELECT from_unixtime(unix_timestamp(datetime_col, 'd/MM/yyyy HH:mm'), 'yyyy-MM-dd') AS target_date FROM your_table;
方法2:date_format + to_timestamp组合(Hive 2.1.0及以上版本支持)
先将字符串转为带格式的时间戳,再提取目标日期格式:
-- 测试单个值 SELECT date_format(to_timestamp('4/12/2023 15:37', 'd/MM/yyyy HH:mm'), 'yyyy-MM-dd') AS target_date; -- 针对列查询(替换datetime_col和your_table为实际名称) SELECT date_format(to_timestamp(datetime_col, 'd/MM/yyyy HH:mm'), 'yyyy-MM-dd') AS target_date FROM your_table;
注意事项
- 格式符需严格匹配原字符串:
d表示1位或2位的日,MM表示2位的月,yyyy是4位年,HH是24小时制小时,mm是分钟。 - 若原字符串的月/日是1位或2位混合,
d和MM格式符可自动兼容识别。
内容的提问来源于stack exchange,提问作者Zikra Noman
相关产品推荐
相关产品推荐

