将字符串转换为数字

时间:2020-09-09 08:09:13

标签: sql postgresql

请给我一列数字类型的表格。我想过滤子字符串并将值存储在数字列(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

1 个答案:

答案 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 <>小提琴。