2014-11-25 14 views
6

Tôi đang sử dụng "PostgreSQL 9.3.5"Làm thế nào để tự động tăng giá trị Alpha-Numeric trong postgresql?

Tôi có một Bảng (StackOverflowTable) với cột(SoId,SoName,SoDob).

Tôi muốn có một Sequence generator cho cột SoId là giá trị Alpha-số.

Tôi muốn tự động tăng giá trị Alpha-Numeric trong postgresql.

For eg : SO10001, SO10002, SO10003.....SO99999. 

Edit:

Nếu ngày mai tôi cần phải tạo ra một trình tự có thể được như SO1000E100, SO1000E101,... và trong đó có một hiệu suất tốt. Vậy giải pháp tốt nhất là gì!

+1

Nếu ** tất cả ** giá trị ** luôn luôn ** có tiền tố 'S0' Tôi sẽ không tạo ra giá trị đó chút nào. Tôi thà sử dụng một cột 'nối tiếp' và một khung nhìn định dạng id được tạo ra (số) theo cách bạn muốn. Yêu cầu ít không gian hơn và ít chi phí hơn để tạo số. –

Trả lời

3

Sử dụng trình tự và giá trị mặc định cho id:

postgres=# CREATE SEQUENCE xxx; 
CREATE SEQUENCE 
postgres=# SELECT setval('xxx', 10000); 
setval 
-------- 
    10000 
(1 row) 

postgres=# CREATE TABLE foo(id text PRIMARY KEY 
            CHECK (id ~ '^SO[0-9]+$') 
            DEFAULT 'SO' || nextval('xxx'), 
          b integer); 
CREATE TABLE 
postgres=# insert into foo(b) values(10); 
INSERT 0 1 
postgres=# insert into foo(b) values(20); 
INSERT 0 1 
postgres=# SELECT * FROM foo; 
    id | b 
---------+---- 
SO10001 | 10 
SO10002 | 20 
(2 rows) 
+0

Cảm ơn phản hồi của bạn :) – 09Q71AO534

+0

Có thể đơn giản hơn để sử dụng 'START [WITH] 10000' thay vì' setval ('xxx', 10000) riêng biệt '. –

3

Bạn có thể xác định giá trị mặc định của cột bạn như là một nối của Sbình thườngsequence như dưới đây:

CREATE SEQUENCE sequence_for_alpha_numeric 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 1 
    CACHE 1; 


CREATE TABLE table1 
(
    alpha_num_auto_increment_col character varying NOT NULL, 
    sample_data_col character varying, 
    CONSTRAINT table1_pkey PRIMARY KEY (alpha_num_auto_increment_col) 
) 
; 

ALTER TABLE table1 ALTER COLUMN alpha_num_auto_increment_col SET DEFAULT TO_CHAR(nextval('sequence_for_alpha_numeric'::regclass),'"S"fm000000'); 

thử nghiệm :

     ^
insert into table1 (sample_data_col) values ('test1'); 
insert into table1 (sample_data_col) values ('test2'); 
insert into table1 (sample_data_col) values ('test3'); 

select * from table1; 
alpha_num_auto_increment_col | sample_data_col 
------------------------------+----------------- 
S000001      | test1 
S000002      | test2 
S000003      | test3 
(3 lignes) 

Cách sử dụng sequences

Cách sử dụng chức năng to_char.

+0

Cảm ơn bạn đã trả lời :). Khi FIFO tôi đã bình chọn Pavel Stehule Answer. – 09Q71AO534

0

Tạo Một chuỗi như dưới đây

CREATE SEQUENCE seq_autoid 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 10000 

Tạo A Hàm để tạo alpha số id

create or replace function auto_id() returns varchar as $$ 
select 'SO'||nextval('seq_autoid') 
$$ language sql 

và thử ví dụ này bảng

create table AAA(id text ,namez text) 

insert into AAA values (auto_id(),'MyName') 
insert into AAA values (auto_id(),'MyName1') 
insert into AAA values (auto_id(),'MyName2') 
+0

Cảm ơn bạn đã trả lời :). Khi FIFO tôi đã bình chọn Pavel Stehule Answer. – 09Q71AO534

Các vấn đề liên quan