在 postgresql 中,我试图为文本字段中的价格返回格式化的价格值,但仅当文本字段值不包含其他多余文本时。
例如,使用这三个文本值...
'提供超过 580,000 美元'
'499000'
“现在 419,000 美元 - 459,000 美元”
我想回来...
'提供超过 580,000 美元'
“499,000 美元”
“现在 419,000 美元 - 459,000 美元”
我一直在尝试使用正则表达式来提取我的值,然后转换为十进制,然后格式化输出以获得我想要的值。例如...
SELECT
CASE WHEN COALESCE(SUBSTRING(btrim('499000'::text) FROM '(^(\$?[0-9,]*)(\.[0-9]{2})?)$'),'') != ''
THEN to_char(substring('499000' FROM '^((\$?[0-9,]*)(\.[0-9]{2})?)$')::decimal, 'FM$999,999,999'::text)
ELSE '499000'
END as testresult
当我将 '499000' 换成 'Offers over $580,000' 时,我收到一个错误,因为正则表达式仍在将其视为有效,然后尝试将其转换为十进制。但是我无法理解为什么第二个值通过正则表达式,因为我说字符串必须以选项美元符号 + 数字组合开头。我认为。
谁能指出我正确的方向?我看过许多其他正则表达式帖子,但没有一个可以帮助我回答这个问题(如果它包含解决方案,很高兴被指向另一个帖子)。
谢谢!