PostgreSQL 9.0.1 で少し複雑な文字列変換をしようとしています。の値はmy_col
、次の形式の長い文字列です。
'12345_sometext_X12B_1'
'12345_sometext_optionaltext_Y09B_1'
'12345_sometext_optionaltext_X12A_1'
「X12」部分を既知の数値に変換する必要があります。いくつかの異なる既知の値 (最大 5) があります。
サブクエリを必要とせずに、1 つのクエリ内でこれを判断できると期待しています。ただし、以下は私にとってはうまくいきません。最後の列は、例外をスローする列です。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
誰かが私にアドバイスできますか?