我有一个价格列,它是字符串,并且有来自世界各地的产品的价格,现在当我尝试执行任何操作,如总和我收到错误。 所以我的问题是如何从所有国家/地区的价格列中删除货币符号?
以下是我的示例输入: -
locale price
cs_CZ 2462475,38 K
da_DK kr 591.872,50
de_AT 267,70
de_CH CHF 1'998.99
de_DE 1.798,09
en_AE AED7,236.20
en_AU $1,699.00
en_BD Tk999,999.00
en_HK HK$6,188.00
en_HU Ft344,524,655.48
tr_TR 2.344.697,66 TL
答案 0 :(得分:0)
您似乎同时拥有小数点和十进制逗号,但总是两位小数(希望其余的数据也是如此)。
在外部SELECT中,您将替换小数侧的小数点逗号,并在整数侧删除千位分隔符。结果转换为数字类型,您可以使用它来计算总和等。
SELECT (
regexp_replace(left(substring, length(substring) -3),'[.,'']','','g')
|| replace(right(substring, 3),',','.'))::numeric,
*
FROM (
SELECT substring(column1 from '(([0-9]+[,.''])*[0-9]+[.,][0-9]{2})[^0-9]*$'),
column1
FROM (
VALUES ('2462475,38 K'),
('kr 591.872,50'),
('267,70'),
('CHF 1''998.99'),
('1.798,09'),
('AED7,236.20'),
('$1,699.00'),
('Tk999,999.00'),
('HK$6,188.00'),
('Ft344,524,655.48'),
('2.344.697,66 TL')
) currencies
) sq1;
以下是与9.0版PostgreSQL兼容的完整答案(未使用左()或右()函数)。此外,值列表将替换为SELECT查询,您可以使用自己的表和列替换该查询。最后,它全部被包含在SELECT查询中,该查询演示了sum-function的使用。
SELECT sum(numeric) FROM (
SELECT (
regexp_replace(substr(substring, 0, length(substring) -3),'[.,'']','','g')
|| replace(substr(substring, length(substring) -3, length(substring)),',','.'))::numeric,
*
FROM (
SELECT substring(column1 from '(([0-9]+[,.''])*[0-9]+[.,][0-9]{2})[^0-9]*$'),
column1
FROM (
SELECT column1 FROM your_table
) currencies
) sq1
) sq2
答案 1 :(得分:0)
Postgres将大多数语言环境处理卸载到操作系统。因此,如果操作系统了解区域设置名称,并且您的价格字符串与其预期格式匹配,Postgres货币转换例程将仅适用于您。
例如,Windows不会接受da_DK
作为区域设置,即使它确实如此,它也不接受字符串kr 591.872,50
,因为它希望丹麦货币符号为{ {1}}代替kr.
。
那就是说,我认为这应该在基于Linux的服务器上运行得相当好:
kr