在PostgreSQL中将数字列设置为等于格式化的varchar货币列

时间:2015-07-10 19:51:44

标签: postgresql type-conversion

我有一个带有美元符号的VARCHAR(1000)价格列(例如$100),我创建了一个新的NUMERIC(15,2)列,我希望将其设置为等价格在VARCHAR列中。

这在MySQL中对我有用:

UPDATE  product_table
SET cost = REPLACE(REPLACE(price, '$', ''), ',','');

但在PostgreSQL中会抛出错误:

ERROR:  column "cost" is of type numeric but expression is of type character
LINE 2: SET cost = REPLACE(REPLACE(price, '$', ''), ',','');
                   ^
HINT:  You will need to rewrite or cast the expression.

我尝试按照提示进行了尝试,并尝试了一些谷歌搜索示例,但我的小脑子还没能弄明白。

2 个答案:

答案 0 :(得分:1)

使用REPLACE简单地投射cast .. as numeric的结果。

试试这个:

UPDATE  product_table
SET cost = CAST(REPLACE(REPLACE(price, '$', ''), ',','') AS NUMERIC);

我不建议使用此表格结构,因为它可能导致异常(cost值并不反映price值。)

答案 1 :(得分:1)

在PostgreSQL中你可以一举完成,而不是在单独的调用中替换'$'','

UPDATE product_table
SET cost = regexp_replace(price, '[$,]', '', 'g')::numeric(15,2);

regexp_replace中,模式 [$,] 表示将'$'','替换为替换字符串(在这种情况下为空字符串''),'g'标志表示需要替换所有此类模式。

然后,您需要将结果字符串转换为numeric(15,2)值。