创建字母数字序列Oracle SQL

时间:2016-10-12 18:38:33

标签: sql oracle

我需要为我的主键创建一个包含3个字符和4个数字的字母数字序列。我试过谷歌搜索它,但没有遇到任何明确或有用的东西。

那么,如何在Oracle中创建一个包含3个字符和4个数字的字母数字序列?

2 个答案:

答案 0 :(得分:1)

这种序列没有开箱即用的支持。您可以使用Oracle表达式将数字序列转换为您描述的序列。 。E.g,:

select a || b || c || last_4 from (
SELECT ROWNUM rn,
       lpad(MOD (ROWNUM, 10000),4,'0') last_4,
       CHR (MOD (FLOOR (ROWNUM / 10000), 26) + ASCII ('A')) c,
       CHR (MOD (FLOOR (ROWNUM / (10000 * 26)), 26) + ASCII ('A')) b,
       CHR (MOD (FLOOR (ROWNUM / (10000 * 26 * 26)), 26 * 26) + ASCII ('A')) a
FROM   DUAL
CONNECT BY ROWNUM <= POWER (26, 3) * 10000
)

答案 1 :(得分:1)

@mathguy的讽刺是非常有效的,你应该满足要求。 无论如何,您可以使用简单的映射将数字转换为序列字符串。

此查询使用序列并将其转换为所需格式:

select 
chr(ascii('A') + mod(FLOOR(FLOOR(FLOOR(my_seq.nextval/10000)/26)/26),26))||
chr(ascii('A') + mod(FLOOR(FLOOR(my_seq.nextval/10000)/26),26)) ||
chr(ascii('A') + mod(FLOOR(my_seq.nextval/10000),26) ) ||
to_char(mod(my_seq.nextval,10000),'FM0009')  seq
from dual;