当前位置: 首页 > 面试题库 >

是否有可能在SQL字母数字序列生成器

鞠宏恺
2023-03-14
问题内容

我需要编写一个SQL查询以在SQL中打印以下非字母序列

0001,0002,…,0009,000A,…,000Z,…,0010,0011,…,001A,…等等,直到…,ZZZZ

请注意:所有字符均大写。

提前致谢


问题答案:

您可以创建如下函数

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;

然后像这样使用它:

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

或者,不创建函数:

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


 类似资料:
  • 如何像 Rxt-AA0001 Rxt-AA0002 Rxt-AA0003 ... ... Rxt-AA9999 Rxt-AB0001 Rxt-AB0002 用这个 这是我在模型中的用户id 我能够生成Alpha数字id,但我不确定如何增加字符

  • 问题内容: 例如由于Dense_Rank函数调用(在MS Sql中),是否有可能获得字母(如A,B)而不是数字(1,2)? 问题答案: 试试这个: 请注意,当您达到27(past )时,事情将变得有趣而无用。 如果您想开始将字母加倍,那么它将变得有些棘手。这适用于所有版本的SQL Server。这些子句只是CASE语句的替代(每个短2个字符)。 在SQL Fiddle上观看现场演示 (适用于SQL

  • 问题内容: 我有下表: 我要订购这样的产品ID(从最小到最大): 这是我尝试过的方法,但是不起作用: 我该怎么做呢? 以及如何获得最大的product_id?我试过了,但是没有用: 问题答案: 尝试执行以下查询以按预期顺序获取结果。 小提琴演示

  • 问题内容: 我知道 将列出表中的所有列,但我有兴趣按字母顺序列出这些列。 说,我有三列,“姓名”,“年龄”和“性别”。 我希望这些列以以下格式组织 是否可以使用SQL做到这一点? 问题答案: 是的,没有:-) SQL本身并不关心列的排列顺序,但是,如果要使用的话: 您会发现它们可能按此顺序出现(尽管我不确定SQL标准是否要求这样做)。 现在您可能 不想 这样做,但有时生活不公平:-) 您还可以使用

  • 问题内容: 如何在Swift中生成随机的字母数字字符串? 问题答案: Swift 4.2更新 Swift 4.2在处理随机值和元素方面引入了重大改进。您可以在此处阅读有关这些改进的更多信息。这是减少到几行的方法: Swift 3.0更新 原始答案:

  • 现在我正在做 但是有没有更好的方法呢?类似于Scala的