如何将 YYYYMMDD 格式 (int) 的日期转换为配置单元中的日期时间格式?
How to convert date in YYYYMMDD format (int) to datetime format in hive?
select from_unixtime(unix_timestamp('20190901','yyyymmdd'));
OK
+----------------------+
| _c0 |
+----------------------+
| 2019-01-01 00:09:00 |
+----------------------+
期望的输出是 2019-09-01 00:00:00。我做错了什么?
想通了。 mm 是分钟,MM 是月。
应该是 yyyyMMdd 而不是 yyyymmdd
高效的方法是使用substr和concat_ws:
with your_table as (select 20190901 as initial_date)
select concat_ws('-',substr(initial_date, 1, 4), substr(initial_date, 5, 2), substr(initial_date, 7, 2)) as dt from your_table;
结果
2019-09-01
或使用regexp_replace:
select regexp_replace(initial_date, '^(\d{4})(\d{2})(\d{2})$','--')
如果您更喜欢使用 unix_timestamp,请使用正确的格式 'yyyyMMdd'
:
select from_unixtime(unix_timestamp('20190901','yyyyMMdd'));
在此处查看数据格式:SimpleDateFormat
select from_unixtime(unix_timestamp('20190901','yyyymmdd'));
OK
+----------------------+
| _c0 |
+----------------------+
| 2019-01-01 00:09:00 |
+----------------------+
期望的输出是 2019-09-01 00:00:00。我做错了什么?
想通了。 mm 是分钟,MM 是月。
应该是 yyyyMMdd 而不是 yyyymmdd
高效的方法是使用substr和concat_ws:
with your_table as (select 20190901 as initial_date)
select concat_ws('-',substr(initial_date, 1, 4), substr(initial_date, 5, 2), substr(initial_date, 7, 2)) as dt from your_table;
结果
2019-09-01
或使用regexp_replace:
select regexp_replace(initial_date, '^(\d{4})(\d{2})(\d{2})$','--')
如果您更喜欢使用 unix_timestamp,请使用正确的格式 'yyyyMMdd'
:
select from_unixtime(unix_timestamp('20190901','yyyyMMdd'));
在此处查看数据格式:SimpleDateFormat