You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL 如何生成两个给定值区间内的字母组合序列

Oracle SQL 字母区间序列生成实现方案

需求说明

现有业务场景需要根据输入的「前缀+起始字母-前缀+结束字母」格式的字符串,生成区间内所有对应组合的序列:

  • 输入V4A-V4G时,输出V4A、V4B、V4C、V4D、V4E、V4F、V4G
  • 输入R8M-R8S时,输出R8M、R8N、R8O、R8P、R8Q、R8R、R8S

实现思路

  1. 拆分输入的区间字符串,得到起始值和结束值
  2. 提取固定公共前缀、起始后缀字母、结束后缀字母
  3. 利用Oracle的CONNECT BY语法生成连续整数序列,对应起始字母到结束字母的ASCII码跨度
  4. 拼接公共前缀与序列对应字母,得到最终结果

完整实现代码

-- 可直接替换range_str的值测试不同区间
WITH input_params AS (
    SELECT 'V4A-V4G' AS range_str FROM DUAL
),
-- 拆分起始、结束值
range_split AS (
    SELECT
        SUBSTR(range_str, 1, INSTR(range_str, '-') - 1) AS start_val,
        SUBSTR(range_str, INSTR(range_str, '-') + 1) AS end_val
    FROM input_params
),
-- 提取公共前缀和首尾字母的ASCII码
parts_extract AS (
    SELECT
        SUBSTR(start_val, 1, LENGTH(start_val) - 1) AS fixed_prefix,
        ASCII(SUBSTR(start_val, -1)) AS start_ascii,
        ASCII(SUBSTR(end_val, -1)) AS end_ascii
    FROM range_split
)
-- 生成最终序列
SELECT fixed_prefix || CHR(start_ascii + LEVEL - 1) AS seq_value
FROM parts_extract
CONNECT BY LEVEL <= end_ascii - start_ascii + 1;

测试验证

将input_params里的range_str改为R8M-R8S,执行后即可得到预期的R8M到R8S的序列输出。

注:当前实现适用于最后一位为单可变字母、前面部分为固定前缀的场景,如果是多字母可变后缀可调整ASCII码计算逻辑适配。

内容的提问来源于stack exchange,提问作者Vinoth_S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:45:03