在PostgreSQL 11.0中,将浮点值限制在小数点后2位



我在PostgreSQL 11.0 中有以下表格

age
(null)
12 Months
2 Years
14 Months
7 Weeks
365 Days

我应用了一个正则表达式来提取"月、年、周"之前的数字,并将它们转换为年。

当前输出如下:

age              col1
(null)           (null)
12 Months        1
2 Years          2
14 Months        1.16666667
7 Weeks          0.13461538
365 Days         1

使用的查询如下:

alter table tbl1
create column col1;
update tbl
set col1 = case 
when age ilike '%year%' then (regexp_match(age, 'd+'))[1]::float 
when age ilike '%month%' then ( (regexp_match(age, 'd+'))[1]::float / 12) 
when age ilike '%week%' then ( (regexp_match(age, 'd+'))[1]::float / 52)
when age ilike '%day%' then ( (regexp_match(age, 'd+'))[1]::float / 365)
else null
end ;

我想进一步将小数位数限制在2位,并将数字四舍五入。col1的数据类型为"float",生成的列也应为float。预期输出为(仅第1列(:

col1
(null)
1
2
1.17
0.13
1

非常感谢您的帮助!!

alter table tbl1
create column col1;
update tbl
set col1 = case 
when age ilike '%year%' then (regexp_match(age, 'd+'))[1]::numeric(16,2)::float 
when age ilike '%month%' then ( (regexp_match(age, 'd+'))[1]::float / 12)::numeric(16,2)::float  
when age ilike '%week%' then ( (regexp_match(age, 'd+'))[1]::float / 52)::numeric(16,2)::float 
when age ilike '%day%' then ( (regexp_match(age, 'd+'))[1]::float / 365)::numeric(16,2)::float 
else null
end ;

你能试试这个吗。您也可以使用round(column_name::numeric, n)

相关内容

  • 没有找到相关文章

最新更新