我想通过在其上添加0来将9位数转换为10位数。 例如,在表ABC中,有一个名为B的列,它取一个最长10位的数字。
现在有时我会得到一个9位数字。 因此,在这种情况下,当面对一个9位数时,我需要触发一个触发器使其成为10位数,然后插入表中。
答案 0 :(得分:1)
为此,您需要创建具有字符数据类型的列,以便它可以保存前导零。
您无需为此简单操作编写任何触发器。你可以使用lpad来实现这个目的:
eg.g
Insert into table1(number_col) values ( lpad(999999999, 10, '0'));
select * from table1;
| number_col |
|-----------------|
| 0999999999 |
要在触发器中使用此功能,请按如下所示创建触发器(未测试);
create or replace trigger trg_table1
before insert or update of number_col on table1
for each row
begin
:new.number_col := lpad( :new.number_col, 10, '0' );
end;
答案 1 :(得分:0)
你真的不需要将它作为触发器。在数字的前面添加0实际上仅适用于人类,计算机不关心,并且除非将列转换为字符串格式,否则无法将信息存储在数据库中。
您正在寻找的是以下三种方式之一:要么改变表单显示信息的方式以添加填充,如果数字少于10,000,000,000以影响用户查看信息的方式(最推荐)
或者,如果需要,使用lpad函数将数字转换为带有0填充的字符串
lpad(input,10,'0')
请注意,如果用户可以编辑此号码,则需要转换回要插入数据库的号码。 (第二最推荐)
最后,您始终可以以字符串格式存储值,并在插入时使用上面的lpad。 我不建议这样做,因为字符串比数字占用更多的空间,并且数据库不会快速搜索它们。另外,为什么当你可以以编程方式改变数据对用户的看法时,为什么纯粹为了用户的目的而将数字存储为字符串呢?