提问人:Mephistofee 提问时间:10/13/2016 最后编辑:Mephistofee 更新时间:10/13/2016 访问量:2312
创建字母数字序列 Oracle SQL
Creating Alphanumeric Sequence Oracle SQL
问:
我需要为我的主键创建一个包含 3 个字符和 4 个数字的字母数字序列。我试过在谷歌上搜索它,但没有遇到任何清晰或有用的东西。
那么,如何在 Oracle 中创建具有 3 个字符和 4 个数字的字母数字序列呢?
答:
1赞
Matthew McPeak
10/13/2016
#1
对此类序列没有开箱即用的支持。您可以使用 Oracle 表达式将数字序列转换为您描述的内容。例如,:
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
)
评论
0赞
Tyler Christian
7/6/2017
我认为作者正在寻找在调用时生成的单个序列。这会一次生成所有序列,我想这些序列可以被存储和引用。但是,可能存在一些阻塞问题,导致检索重复序列。
1赞
Marmite Bomber
10/13/2016
#2
@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;
评论
0赞
Tyler Christian
7/6/2017
请注意,它确实需要您设置一个序列以从 ( my_seq 开始)。如果它是一个可以调用的函数,这可能会更好。
评论
AAA0001
, 1000 = 'AAB0000