在 PostgreSQL 中将数值列设置为格式相等的 varchar 货币列

Set numeric column to equal formatted varchar currency column in PostgreSQL

提问人:Hack-R 提问时间:7/11/2015 最后编辑:PatrickHack-R 更新时间:7/12/2015 访问量:249

问:

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

这是在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.

我试着按照提示进行操作,并尝试在谷歌上搜索一些例子,但我的小脑袋一直无法弄清楚。

PostgreSQL 类型转换

评论


答:

1赞 hornobster 7/11/2015 #1

只需将 的结果转换为 。REPLACEcast .. as numeric

试试这个:

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

不过,我不建议使用这种表结构,因为它可能会导致异常(值不反映值)。costprice

1赞 Patrick 7/11/2015 #2

在 PostgreSQL 中,您可以一举完成此操作,而不是在单独的调用中替换 '$' 和 ',' s:

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

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

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