在PSQL中将字符串转换为十进制数

4

我正在尝试使用以下命令将字符串转换为十进制数:

SELECT cast(minimum_ticket_price AS DECIMAL(6,2) 
FROM all_event_details 
WHERE minimum_ticket_price ~ E'^\\d+$';

但是这并没有实际更新我的数据库。它只是在我的终端中显示所选列。我需要将select与update结合使用吗?我尝试过,但我一定是语法有误,因为我无法将转换保存到数据库中。
以下是我尝试的内容:
UPDATE all_event_details 
   SET minimum_ticket_price = cast(minimum_ticket_price AS DECIMAL(6,2)) 
WHERE ( minimum_ticket_price <> '') IS TRUE;;

1
你需要更改列的数据类型。如果使用“不正确”的值进行更新,则会失败。但是只要有一个值不是十进制数,就无法更改数据类型。而且,minimum_ticket_price <> ''已足够,不需要使用is true - user330315
2个回答

0
你在做什么? 首先添加新列,使用十进制数据类型(但我建议使用基本数据类型,如实数或双精度,效率更高)。
 ALTER TABLE my_table ADD COLUMN minimum_ticket_priceR  real ;

 UPDATE all_event_details 
    SET minimum_ticket_priceR = to_number(coalesce(minimum_ticket_price,"0"),"999999D99") --for each row

如果minimum_ticket_price是字符串,你不能设置为数字... 如果是数字,则将其设置为字符串没有意义。因此,我建议删除列minimum_ticket_price并重命名另一列(使用ALTER TABLE)。你所做的是不理解。

0

如果数据类型支持 minimum_ticket_price 列的数据,则可以进行更新,否则会出现错误。 例如,如果 minimum_ticket_price 列的数据类型为 varchar,则您的代码必须正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接