我想在PostgreSQL 9.0.1中做一個稍微複雜的字符串轉換。在my_col
的值是在的格式長串:CASE與正則表達式:「在上下文中調用的集值函數,不能接受集」
'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
有人可以告訴我?
第一:更新,你在一個過時的版本。升級到9.0.10以改進錯誤修復,安全性和穩定性。不需要轉儲和重新加載,只需安裝新的二進制文件即可。 –