【问题标题】:Oracle - generate records with alphanumeric number and character ascendingOracle - 生成带有字母数字和字符升序的记录
【发布时间】:2017-01-16 09:50:55
【问题描述】:

我想要一个包含客户唯一键的列,由数字+字符升序组成。 是否有可能以某种方式指示 Oracle 生成许多记录,从 1a 到 1z,然后从 2a 到 2z,等等,直到 300000z:

CUSTOMER_NUM
------------
10a

10b

10c

.

.

10z

11a

11b

.

到目前为止,我所达到的最好的是这样的:

select ROUND(DBMS_RANDOM.VALUE(9,21)), dbms_random.string('l', 1) from dual;

请问有什么想法吗?我想生成至少有 300000 条记录的测试表。

谢谢!

【问题讨论】:

  • 你为什么要那个?大 NUMBER 占用的字节数不会超过您建议的字节数 - 实际上它使用 更少 个字节。

标签: sql oracle alphanumeric


【解决方案1】:

下面的查询应该会给你想要的结果。

WITH
TABLE1 AS (SELECT LEVEL PART_1   FROM DUAL CONNECT BY LEVEL <= 300000),
TABLE2 AS (SELECT CHR(LEVEL+96) AS PART_2 FROM DUAL CONNECT BY LEVEL <27)
SELECT PART_1||PART_2 AS KEY_ID FROM TABLE1,TABLE2 

【讨论】:

  • 这似乎与 Wernfried Domscheit 的回答非常相似
  • 见鬼,感谢您快速而出色的回复!我想我需要澄清一下,我有一个已经存在的列,所以我需要用上述所有条目填充它。如何使用 INSERT 命令交叉它?
  • 如果数据库中已有 300000 行,则需要更新它们,如果表中没有任何行,则可以使用INSERT INTO YOUR_TABLE SELECT * FROM (above query here)
【解决方案2】:

您可能需要以下内容:

select alpha || num
from 
(select substr('qwertyuiopasdfghjklzxcvbnm', level, 1) as alpha from dual connect by level <= 26)
cross join 
(select level as num from dual connect by level <= 2)
order by num, alpha

第一个查询使用包含所有字符的字符串并将其拆分为包含单个字符的 26 行。

第二个查询生成给定数量的数字以与字符连接。

【讨论】:

    【解决方案3】:

    你可以试试这个:

    WITH n AS 
        (SELECT LEVEL AS Num FROM dual CONNECT BY LEVEL < 10),
    c AS 
        (SELECT CHR(LEVEL + 96) AS alpha FROM dual CONNECT BY LEVEL <= 26)
    SELECT num||alpha
    FROM n 
        CROSS JOIN c;
    

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2011-06-18
      相关资源
      最近更新 更多