hivesql中已知授信年月、对应授信人数,生成新一列,分裂成从授信年月到当前日期年月的逐月的数据行 表名pd_data.credit_mob_left_table 字段c_ym 表示授信年月 用最常见的函数处理,避免hivesql兼容性问题
时间: 2024-12-23 20:24:25 浏览: 5
要生成新列并按月分解从授信年月(`c_ym`)到当前日期的逐月数据行,你可以使用Hive SQL的日期函数来实现。由于Hive不直接支持`decode()`函数,但可以利用`CASE`语句替代,同时处理兼容性问题。这里是一个可能的解决方案:
首先,我们需要确定当前日期,假设名为`current_date`。这通常通过内置函数`CURRENT_DATE`或`sysdate()`获取,具体取决于你的Hive版本。
```sql
-- 获取当前日期
SET current_date = CURRENT_DATE;
-- 假设c_ym是一个日期类型字段
SELECT
c_ym,
CASE
WHEN c_ym < current_date THEN
DATE_FORMAT(current_date - INTERVAL c_ym DAY, 'yyyy-MM')
ELSE
CONCAT(c_ym, '-', DATE_FORMAT(current_date, 'yyyy-MM'))
END AS monthly_range
FROM pd_data.credit_mob_left_table;
```
这段SQL做了以下事情:
1. 检查`c_ym`是否小于当前日期。如果是,则计算从`c_ym`到`current_date`之间的差值,并格式化为月份。
2. 如果`c_ym`大于等于当前日期,直接返回`c_ym`及其与当前日期的月份组合。
注意:这个示例假设`c_ym`字段存储的是日期类型的整数表示,如果不是,可能需要先转换它。如果`c_ym`已经是日期格式,可以直接比较。
阅读全文