SQL,它在给定的起点和终点之间生成字母序列

Kis*_*mar 2 sql oracle

我需要一个SQL,它在给定的起点和终点之间生成字母序列.

就像,Start='C' End='G'输出应该是

C
D
E
F
G 
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

select chr(ascii('C') + level - 1) 
from dual
connect by ascii('C') + level - 1 <= ascii('G');
Run Code Online (Sandbox Code Playgroud)

使用connect by这样(no start with和一个仅取决于级别的结束条件)是未记录的(并且不受支持),因此它可能会中断任何时间(尽管我不知道任何不适用的版本).

从11.2开始,您还可以使用递归公用表表达式:

with letters (letter, inc) as (
   select 'C', 1 as inc
   from dual
   union all
   select chr(ascii('C') + p.inc), p.inc + 1
   from letters p
   where p.inc < 5
)
select letter
from letters;
Run Code Online (Sandbox Code Playgroud)

  • @ZoharPeled:使用`connect by`就像在甲骨文世界中用作"系列生成器"一样.虽然这种"连接"用法并不"支持",但我非常怀疑甲骨文是否会删除它.我刚刚添加了评论,以防有人抱怨它*不受支持. (2认同)