无效的长度:场上位置必须大于零
问题描述:
我想变换PostgreSQL的列:无效的长度:场上位置必须大于零
下面是为col_a一些值:
col_A
---------
John_arrived
Mary_Brown_arrived
J_C_Jr_arrived
Q_arrived
的目的是让第一部分和只为col_a的最后一部分:
d_col_A
-------
John_arrived
Mary_arrived
J_arrived
Q_arrived
这里是我的查询:
with t1 as (
select split_part(col_A, '_'::text, 1) || '_'
|| COALESCE (split_part(col_A, '_'::text, -1), '') as d_col_A
from my_table
)
select distinct d_col_A from t1
然后我得到了以下错误:
Invalid Length
Detail:
-----------------------------------------------
error: Invalid Length
code: 8001
context: field position must be greater than zero
query: 2382655
location: funcs_string.cpp:1565
process: query0_27 [pid=11502]
-----------------------------------------------
任何想法,我做错了什么?谢谢!
答
如果你想要列的最后一部分,你不能使用-1。您需要反转该列并获得第一个零件并再次取反:
reverse(split_part(reverse(col_A), '_'::text, 1))