我需要为我的主键创建一个包含3个字符和4个数字的字母数字序列。我试过谷歌搜索它,但没有遇到任何明确或有用的东西。
那么,如何在Oracle中创建一个包含3个字符和4个数字的字母数字序列?
答案 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;