我正在尝试在 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
有人可以给我建议吗?