请给我一列数字类型的表格。我想过滤子字符串并将值存储在数字列(val)中。
我该怎么办?
create table tab1 (tmp varchar(20), val numeric(4,0));
insert into tab1(tmp, val)
insert into tab1(tmp) values ('exp989');
insert into tab1(tmp) values ('xxx123');
insert into tab1(tmp) values ('xxx098');
insert into tab1(tmp) values ('nat246');
update tab1
set val = CAST(substring(trim(tmp), 4, 3) as NUMERIC)
where substring(trim(tmp), 4, 3) ~ '^\s*[0-9]+$';
我很惊讶我的输出是(第3行有问题,我期望 098
第1行:exp989、989
第2行:xxx123、123
第3行:xxx098,98
第4行:nat246,246
答案 0 :(得分:0)
如果要存储前导零,请使用字符串列。您可以使用check
约束来验证字符是否全部为数字:
create table tab1 (
tmp varchar(20),
val varchar(4)
check (val ~ '^[0-9]+$')
);
然后您可以将update
设为:
update tab1
set val = substring(trim(tmp), 4, 3)
where substring(trim(tmp), 4, 3) ~ '^\s*[0-9]+$';
请注意,没有转换为数字。
Here是db <>小提琴。