У меня есть следующая таблица в PostgreSQL 11.0
min age max age
1 Month 12 Months
1 Year 16 Years
1 Day 365 Days
365 Days 369 Days
N/A N/A
NULL NULL
Я хотел бы преобразовать значения в год. Я извлекаю строку после di git и проверяю, есть ли это «годы», «месяцы» или «дни», а затем конвертирую di git перед строкой в год.
Я пробовал следовать запрос:
update tbl
set min_age =
case
when substring(min_age, '^\d+\s(.*)') ~* 'Month'
then abs(substring(min_age, '^(\d+)\s.*')/12)
when substring(min_age, '^\d+\s(.*)') ~* 'Months'
then abs(substring(min_age, '^(\d+)\s.*')/12)
when substring(min_age, '^\d+\s(.*)') ~* 'Day'
then abs(substring(min_age, '^(\d+)\s.*')/365)
when substring(min_age, '^\d+\s(.*)') ~* 'Days'
then abs(substring(min_age, '^(\d+)\s.*')/365)
when substring(min_age, '^\d+\s(.*)') ~* 'Year'
then abs(substring(min_age, '^(\d+)\s.*'))
when substring(min_age, '^\d+\s(.*)') ~* 'Years'
then abs(substring(min_age, '^(\d+)\s.*'))
end ;
update tbl
set max_age = case
when substring(min_age, '^\d+\s(.*)') ~* 'Month'
then abs(substring(min_age, '^(\d+)\s.*')/12)
when substring(min_age, '^\d+\s(.*)') ~* 'Months'
then abs(substring(min_age, '^(\d+)\s.*')/12)
when substring(min_age, '^\d+\s(.*)') ~* 'Day'
then abs(substring(min_age, '^(\d+)\s.*')/365)
when substring(min_age, '^\d+\s(.*)') ~* 'Days'
then abs(substring(min_age, '^(\d+)\s.*')/365)
when substring(min_age, '^\d+\s(.*)') ~* 'Year'
then abs(substring(min_age, '^(\d+)\s.*'))
when substring(min_age, '^\d+\s(.*)') ~* 'Years'
then abs(substring(min_age, '^(\d+)\s.*'))
end
Ожидаемый результат:
min age max age
0 1
1 16
0 1
1 1
N/A N/A
NULL NULL
Любая помощь приветствуется.