首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询Oracle中的3列合并值和合并为主键

查询Oracle中的3列合并值和合并为主键
EN

Stack Overflow用户
提问于 2017-12-08 04:57:18
回答 2查看 222关注 0票数 1

在一个表中,很少有列,在3列中,我希望合并这3列的值,并在合并这3列后生成主键。Col1具有数据类型长度4col2col3分别具有数据类型长度5 &E 1103E 211。在col2 & col3中,如果任何值小于最大长度,则使用LPAD和,然后合并到主键中。

如果"123400142032" col1= 1234,col2 = 142,col3 = 32,那么合并后应该像主键一样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-08 05:44:23

你可能需要这样的东西。

代码语言:javascript
复制
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

代码语言:javascript
复制
INSERT INTO yourtable (col1, col2, col3)
     VALUES (1234, 142, 32);

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-12-08 07:06:12

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47707974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档