Я пытаюсь сделать несколько сложное преобразование строк в PostgreSQL 9.0.1. Значения в my_col
представляют собой длинные строки в формате:
'12345_sometext_X12B_1'
'12345_sometext_optionaltext_Y09B_1'
'12345_sometext_optionaltext_X12A_1'
Мне нужно перевести часть «X12» в известное числовое значение, есть несколько разных известных значений (до 5).
Я ожидаю, что смогу определить это в одном запросе без подзапроса. Однако следующее не работает для меня. Последний столбец вызывает исключение. Кажется, по какой-то причине я не могу выполнить оператор CASE
, используя выходные данные этих функций. Я включил следующие столбцы только в демонстрационных целях.
select
regexp_matches(my_col, E'^.*_([^_]*)[A-Z]{1}_\\d*$'), -- returns {'X12'}
(regexp_matches(my_col, E'^.*_([^_]*)[A-Z]{1}_\\d*$'))[1], -- returns 'X12'
case (regexp_matches(my_col, E'^.*_([^_]*)[A-Z]{1}_\\d*$'))[1]
when 'X12' then '1200'
when 'Y09' then '950'
else '?' end -- should return '1200' but throws error
from my_table;
Вместо этого я получаю сообщение об ошибке:
ERROR: set-valued function called in context that cannot accept a set
SQL state: 0A000
Может ли кто-нибудь посоветовать мне?