我有一个带有美元符号的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.
我尝试按照提示进行了尝试,并尝试了一些谷歌搜索示例,但我的小脑子还没能弄明白。
答案 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)
值。