2017-10-18 155 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)) 
相關問題