如何使用日期和序列号创建字母数字序列

How to create alphanumeric sequence using date and sequence number

我想在 oracle 中创建一个字母数字序列。 Table 名称是 rel_details 它由四列组成。

rel_id
rel_name
rel_modified_date
rel_desc

rel_id 中,我想生成像 REL230420151001

这样的 ID

REL 是一个字符串, 23042015 是今天的日期, 1001 是一个起始数字。

如何创建此类型序列。

如果我是你,我不会费心将这样的序列存储在列中;我会单独存储包含相关信息的列,然后有一个虚拟列将它们连接在一起,或者在视图中进行连接。

如果您使用 12c,那么这是使用 IDENTITY columnVIRTUAL 列的一种方法.

identity column是12c版本引入的,virtual column是11g版本引入的

SQL> CREATE TABLE t
  2            (
  3              ID NUMBER GENERATED ALWAYS AS IDENTITY
  4              START WITH 1000 INCREMENT BY 1,
  5              text VARCHAR2(50),
  6              dt DATE DEFAULT SYSDATE,
  7              my_text varchar2(1000) GENERATED ALWAYS AS (text||to_char(dt, 'DDMMYYYY')||ID) VIRTUAL
  8            );

Table created.

SQL>
SQL> INSERT INTO t(text) VALUES ('REL');

1 row created.

SQL>
SQL> SELECT text, my_text FROM t;

TEXT  MY_TEXT
----- ------------------------------
REL   REL230420151000

SQL>

我创建了以 1000 开头的标识列,您可以自定义您想要的方式。

关于 VIRTUAL 列有一个小技巧。您必须明确地将其转换为具有固定大小的 varchar2,否则隐式转换将使其达到 最大大小。有关详细信息,请参阅此

检查这个,您可能无法创建序列,但您可以使用 select,如下所示。

创建序列 mysec 最小值 0 从 10001 开始 递增 1 无缓存;

select 'REL'||to_char(sysdate,'DDMMYYYY')||mysec.nextval 来自 dual;