我在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)