Oracle
 sql >> Baza danych >  >> RDS >> Oracle

czy można mieć generator sekwencji alfanumerycznych w sql

Możesz utworzyć taką funkcję:

create function to_base_36 (n integer) return varchar2
is
  q integer;
  r varchar2(100);
begin
  q := n;
  while q >= 36 loop
     r := chr(mod(q,36)+case when mod(q,36) < 10 then 48 else 55 end) || r;
     q := floor(q/36);
  end loop;
  r := chr(mod(q,36)+case when mod(q,36) < 10 then 48 else 55 end) || r;
  return lpad(r,4,'0');
end;

a następnie użyj go w ten sposób:

select rownum, to_base_36(rownum)
from dual
connect by level < 36*36*36*36;

Lub bez tworzenia funkcji:

with digits as
( select n, chr(mod(n,36)+case when mod(n,36) < 10 then 48 else 55 end) d
  from (Select rownum-1 as n from dual connect by level < 37)
)
select d1.n*36*36*36 + d2.n*36*36 + d3.n*36 + d4.n, d1.d||d2.d||d3.d||d4.d
from digits d1, digits d2, digits d3, digits d4


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień klucz podstawowy

  2. Oracle odpowiednik MySQL INSERT IGNORE?

  3. Optymalny sposób na USUNIĘCIE określonych wierszy z Oracle

  4. Funkcja NCHR() w Oracle

  5. connect by klauzula w regex_substr