提问人:Hack-R 提问时间:7/11/2015 最后编辑:PatrickHack-R 更新时间:7/12/2015 访问量:249
在 PostgreSQL 中将数值列设置为格式相等的 varchar 货币列
Set numeric column to equal formatted varchar currency column in PostgreSQL
问:
我有一个带有美元符号的 VARCHAR(1000) 价格列(例如 ),并且我创建了一个新列,我想将其设置为等于 VARCHAR 列中的价格。$100
NUMERIC(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.
我试着按照提示进行操作,并尝试在谷歌上搜索一些例子,但我的小脑袋一直无法弄清楚。
答:
1赞
hornobster
7/11/2015
#1
只需将 的结果转换为 。REPLACE
cast .. as numeric
试试这个:
UPDATE product_table
SET cost = CAST(REPLACE(REPLACE(price, '$', ''), ',','') AS NUMERIC);
不过,我不建议使用这种表结构,因为它可能会导致异常(值不反映值)。cost
price
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)
评论