从3列查询合并值并在Oracle

时间:2017-12-08 04:57:19

标签: sql oracle

在一个表中有几列,在3列中,我想合并这3列中的值,并在合并这3个值后生成主键。 数据类型长度为4 Col1 ,而 col2 & col3 数据类型长度为5 &分别 3 。在 col2 & col3 如果任何值小于最大长度,则使用 LPAD 0 ,然后合并到主键后。

前 - 如果 col1 = 1234,col2 = 142,col3 = 32 则合并后它应该像“123400142032”一样主键

2 个答案:

答案 0 :(得分:0)

你可能需要这样的东西。

CREATE TABLE yourtable
(
   col1   NUMBER,
   col2   NUMBER,
   col3   NUMBER
);

    ALTER TABLE yourtable ADD (ID NUMBER GENERATED ALWAYS AS ( LPAD(col1,4,0)||LPAD(col2,5,0)||LPAD(col3,3,0) ) );
    ALTER TABLE yourtable ADD CONSTRAINT t_test_pk PRIMARY KEY (ID) USING INDEX;

然后,您只能插入3列,并且列ID会自动填充123400142032等数字。

INSERT INTO yourtable (col1, col2, col3)
     VALUES (1234, 142, 32);

注意:创建表脚本仅供理解。您可能不需要它,因为您已经有一个现有的表。

虚拟列语法GENERATED .. AS仅适用于11g及以上版本。对于较低版本,您可能需要先插入触发器和序列。

答案 1 :(得分:0)

with lp as 
(select max(length(employee_id)) mp from employee),

llp as
(select max(length(first_name)) mf from employee)

select lp.*,lpad(employee_id,lp.mp,'0'),llp.*, lpad(first_name,llp.mf,'0'),
employee_id||lpad(employee_id,lp.mp,'0')||lpad(first_name,llp.mf,'0')from lp,llp,employee;

注意:此处employee_id和first_name是列,您可以将其视为column1和column2 ..