Oracle SQL中将存储的区间范围展开为对应单个数值的实现方案
区间拆分为单值行实现方案
以下方案默认处理整数区间,若需要处理浮点型区间,可根据实际精度调整步长参数即可。假设原始区间表名为range_table,包含range_start(区间起始值)、range_end(区间结束值,包含)、range_id(区间ID)三个字段:
1. PostgreSQL 实现
直接调用内置序列生成函数即可,代码最简:
SELECT generate_series(range_start, range_end) AS single_value, range_id FROM range_table;
2. MySQL 实现
MySQL 8.0及以上版本用递归CTE实现:
WITH RECURSIVE num_series AS ( SELECT range_start AS val, range_end, range_id FROM range_table UNION ALL SELECT val + 1, range_end, range_id FROM num_series WHERE val < range_end ) SELECT val AS single_value, range_id FROM num_series ORDER BY range_id, val;
低版本MySQL可提前构建一张包含连续数值的辅助表,关联原始区间表即可实现相同效果。
3. Python Pandas 实现
处理本地数据表时可以用explode方法快速拆分:
import pandas as pd # 读取原始数据得到DataFrame:df df['single_value'] = df.apply(lambda x: list(range(x['range_start'], x['range_end'] + 1)), axis=1) result_df = df.explode('single_value')[['single_value', 'range_id']]
内容的提问来源于stack exchange,提问作者Martin T
相关产品推荐
相关产品推荐

