如何使用依赖于不同数据类型的数学运算的数据更新新的空列?

How to update new empty column with data that depends on mathematical operation of different data types?

[初学者]

我有一个 table 看起来像这样:

colA    colB
1       <null>
2       <null>
3       <null>

colB 是我添加到 table 的新空列。 colA 是 varchar,colB 是双精度数据类型(float)。

我想用 colA 乘以 2 来更新 colB

新 table 应如下所示:

colA    colB
1       2
2       4
3       6

当我去更新时 colB 像这样:

update tablename set colB = colA * 2

我收到错误:

Invalid operation: Invalid input syntax for type numeric

我试过用这样的解决方案来解决这个问题:

update tablename set colB = COALESCE(colA::numeric::text,'') * 2

但得到同样的错误。

在同一个 table 的 select 语句中,这适用于 colA,它是 varchar:

select colA * 2 from tablename

如何使用不同数据类型引用列来更新包含数学运算的列?我无法更新 colA.

的数据类型
update tablename set colB = colA::numeric * 2

字符串列中有一个值不是有效数字。您将必须修复数据或排除具有 WHERE 条件的某些行。

如果你说 运行 来自你客户端的查询有效,这让我怀疑你的客户端实际上并没有执行整个查询,而是在上面打了一个 LIMIT (一些客户端工具可以做到这一点)。

以下查询必须处理所有行并且应该会失败:

SELECT colA * 2 AS double
FROM tablename
ORDER BY double;

我想 Laurenz Albe 是正确的并且 col_a

中有非数字值

所以UPDATE一定要注意:

UPDATE T
SET col_b = 
  CASE
     WHEN col_a ~'^([0-9]+\.?[0-9]*|\.[0-9]+)$' THEN col_a::numeric *2
  END ;
-- or this way
UPDATE T
SET col_b = col_a::numeric *2
WHERE
      col_a ~'^([0-9]+\.?[0-9]*|\.[0-9]+)$' ;

看看fiddle:https://www.db-fiddle.com/f/4wFynf9WiEuiE499XMcsCT/1

您可以在此处获取“isnumeric”的食谱:isnumeric() with PostgreSQL