我需要使用具有可变部分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等值?
答案 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