如何用常量字符串后跟变量数填充一些列

时间:2016-06-16 10:20:56

标签: sql string oracle plsql

我需要使用具有可变部分e的字符串值填充表格列(在Oracle数据库中)。 G。 AB0001,AB0002,...,AB0112 ...,AB9999,其中AB是常量字符串部分,0001-9999是可变数字部分。我已经在SQL中尝试了以下具有2列的表的解决方案:


    create table tbl1
    (seq1 number(8),
     string1 varchar(32));


    declare
    tst number(8) :=0;
    begin
      for cntr in 1..100
      loop
        tst := cntr;
        insert into TBL1 values (someseq.nextval, concat('AB',tst));
      end loop;
    end;

但在这种情况下,我得到STRING1充满了值AB1,AB2,...,AB10,..这不是我需要的。 如何修改我的脚本以插入AB0001,...,AB0010等值?

3 个答案:

答案 0 :(得分:2)

用零填充数字,或用前导零格式化:

insert into TBL1
values (someseq.nextval, concat('AB', to_char(tst, 'FM0000'));

' FM'格式修饰符可防止添加空格(以允许减号)。

对于您的具体示例,您不需要PL / SQL块;您可以使用hierarchical query生成行的数据:

insert into tbl1(seq1, string1)
select someseq.nextval, concat('AB', to_char(level, 'FM0000'))
from dual
connect by level <= 100;

答案 1 :(得分:1)

使用lpad功能

select lpad(1, 4, '0') from dual
--> '0001'

答案 2 :(得分:0)

尝试这个

INSER INTO table_name(code)
VALUES(CONCAT('AB', LPAD('99', 4, '0'));

或者您可以在插入后基于PK更新

UPDATE table_name SET code = CONCAT('AB', LPAD(PK_Column_Name, 4, '0') ;

或您可以使用触发器

CREATE TRIGGER trgI_Terms_UpdateTermOrder
ON DB.table_name 
AFTER INSERT
AS
BEGIN
    UPDATE  t
    SET     code = CONCAT('AB', LPAD(Id, 4, '0') 
    FROM    DB.table_name t INNER JOIN inserted i ON t.Id = I.Id
END;
GO