如何使用依赖于不同数据类型的数学运算的数据更新新的空列?
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
[初学者]
我有一个 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