如何转换文本36 1/2至36.5 PostgreSQL中
我有一个具有值36 1/2它被存储为字符varying.from PostgreSQL的功能,我需要这个文本转换为36.5,以匹配实际的列值。如何在postgresql中将文本'36 1/2'转换为36.5?如何转换文本36 1/2至36.5 PostgreSQL中
WITH f(n) AS
(SELECT *
FROM regexp_matches('36 1/2', '^([\d.]+)(+(\d+)/(\d+))*$'))
SELECT CASE
WHEN n[2] IS NULL
THEN n[1]::float8
ELSE n[1]::float8 + n[3]::float8/n[4]::float8
END
FROM f;
它正在为36 1/2,但它不能为36 0或36 –
没有人会写“36 0”,肯定?这是无稽之谈。而且很容易使小数部分匹配条件... –
@ShamseerPC你没有问''36''转换,但无论如何,我已经更新了解决方案。 –
是'1/2'唯一小数分量出现,而'36 1/2'是最复杂的用例吗?顺便说一句,处理这个问题的最好方法是修复你的数据源,因此你不需要在Postgres中做任何复杂的按摩。 –