2017-10-18 77 views
0

我想变换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] 
    ----------------------------------------------- 

任何想法,我做错了什么?谢谢!

回答

0

如果你想要列的最后一部分,你不能使用-1。您需要反转该列并获得第一个零件并再次取反:

reverse(split_part(reverse(col_A), '_'::text, 1)) 
相关问题