增量序列需要SQL函数吗
任何一个都可以提供一个SQL函数,按照以下顺序输入字符串并输出下一个增量字符串吗 000000增量序列需要SQL函数吗,sql,oracle,function,Sql,Oracle,Function,任何一个都可以提供一个SQL函数,按照以下顺序输入字符串并输出下一个增量字符串吗 000000 000001 . . 000009 00000A . . 00000Z . . . 000010 000011 . . 000019 00001A . . zzzzzz 如果您能够使用PL/SQL函数,您可以在该块中尝试类似于函数的东西,next\u step,该函数在任意数字集上递增 DECLARE i integer; seqnum varchar2(20) := '00';
000001
.
.
000009
00000A
.
.
00000Z
.
.
.
000010
000011
.
.
000019
00001A
.
.
zzzzzz
如果您能够使用PL/SQL函数,您可以在该块中尝试类似于函数的东西,
next\u step
,该函数在任意数字集上递增
DECLARE
i integer;
seqnum varchar2(20) := '00';
----------------------------------------
function next_step(seq_num varchar2) return varchar2 is
digits varchar2(20) := '012ABC';
last_digit varchar2(1) := substr(seq_num, length(seq_num), 1);
other_digits varchar2(20) := substr(seq_num, 1, length(seq_num) -1);
-- value of last digit
last_digit_value number(5) := instr(digits, last_digit) - 1;
BEGIN
if seq_num is null then
return substr(digits, 2, 1);
end if;
-- increment the digit; roll if needed.
last_digit_value := last_digit_value + 1;
-- "digits||digits" makes the roll easy.
last_digit := substr(digits||digits, last_digit_value + 1, 1);
if last_digit_value >= length(digits) then
-- roll over
other_digits := next_step(other_digits);
end if;
return other_digits||last_digit;
END next_step;
----------------------------------------
BEGIN
dbms_output.enable(null);
dbms_output.put_line(seqnum);
for i in 1 .. 50 loop
seqnum := next_step(seqnum);
dbms_output.put_line(' -> '||seqnum);
end loop;
END;
/
其结果如下:
00
-> 01
-> 02
-> 0A
-> 0B
-> 0C
-> 10
-> 11
-> 12
-> 1A
-> 1B
-> 1C
-> 20
-> 21
-> 22
...
-> C2
-> CA
-> CB
-> CC
-> 100
-> 101
-> 102
...
-> 121
-> 122
该序列可以通过将基础递增整数编码为base36字符串来生成。请参见@AlexK:不清楚OP是否需要base36-序列中的最后一个字符串是zzzz,而不是zzzzz,这意味着OP可能需要base62,或者完全是其他内容。@user674961:您能澄清一下该序列的运行方式吗?是0..9A..Z,还是0..9A..Za..Z,还是其他什么?