hive将字符串etl_dt格式改成如:20200917改成日期2020-09-17
时间: 2024-09-18 17:12:56 浏览: 61
Hive中可以使用内置函数`from_unixtime()`或`date_format()`来将字符串转换成日期格式。假设你的字符串`etl_dt`是以"yyyyMMdd"的形式存储的,你可以通过以下SQL语句将其转换:
```sql
SELECT date_format(unix_timestamp(etl_dt, 'yyyyMMdd'), 'yyyy-MM-dd') AS new_date
FROM your_table;
```
这里,`unix_timestamp(etl_dt, 'yyyyMMdd')`会将字符串转换为Unix时间戳,然后`date_format()`函数再将这个时间戳转换为你想要的"YYYY-MM-DD"格式。
如果你的Hive版本支持`cast()`函数,另一种做法是直接转换:
```sql
SELECT cast(etl_dt as timestamp) as new_date
FROM your_table
DATE_FORMAT(new_date, 'yyyy-MM-dd');
```
在这个例子中,先将字符串转换为timestamp类型,然后再转换回日期格式。
相关问题
hive将日期字段etl_dt格式改成如:20200917改成2020-09-17
在Hive中,如果你有一个日期字段`etl_dt`,其格式是"yyyyMMdd",你可以使用内置函数`from_unixtime()`或者`substr()`以及`concat()`函数来转换它。这里是一个示例查询:
```sql
SELECT
CONCAT(YEAR(from_unixtime(unix_timestamp(etl_dt, 'yyyyMMdd'))), '-',
LPAD(MONTH(from_unixtime(unix_timestamp(etl_dt, 'yyyyMMdd'))), 2, '0'), '-',
LPAD(DAY(from_unixtime(unix_timestamp(etl_dt, 'yyyyMMdd'))), 2, '0'))
FROM your_table;
```
这个查询首先将`etl_dt`转换为Unix时间戳(unix_timestamp()函数),然后使用`from_unixtime()`将其转换回日期格式,最后使用`CONCAT()`连接年、月、日,并使用`LPAD()`函数保证月份和日子始终有两位数。
hive在where中将分区字段日期格式更改,类似20200917改成2020-09-17
在Hive中,如果你想在`WHERE`子句中处理分区字段的日期格式转换,通常是在查询时进行字符串操作。如果你的分区字段存储的是四位数的年份、月份和日期组合,你可以使用内置的函数`split()`和`substr()`来提取并重组日期。
例如,假设你的分区字段名为`dt_partition`,格式为`yyyyMMdd`,可以这样做:
```sql
SELECT * FROM your_table
WHERE split(dt_partition, '')[2] || '-' || substr(dt_partition, 4, 2) || '-' || substr(dt_partition, 6, 2) = '2020-09-17';
```
这里,`split(dt_partition, '')`会返回一个数组,我们取索引为2的部分代表月份;`substr(dt_partition, 4, 2)`获取两位数的年份;`substr(dt_partition, 6, 2)`获取两位数的日期。然后我们将它们连接成新的日期格式。
请注意,这个例子假设日期字符串没有前导零,并且格式始终是四位数。如果数据情况复杂,你可能需要添加额外的条件检查或者转换步骤。
阅读全文