2017-10-18 8 views
0

Je suis en train de transformer une colonne en PostgresSQL:Longueur non valide: position de champ doit être supérieur à zéro

Voici quelques valeurs col_a:

col_A 
--------- 
John_arrived 
Mary_Brown_arrived 
J_C_Jr_arrived 
Q_arrived 

Le but est d'obtenir la première partie et dernière partie de col_a seulement:

d_col_A 
------- 
John_arrived 
Mary_arrived 
J_arrived 
Q_arrived 

Voici ma question:

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 

Puis je me suis les erreurs suivantes:

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] 
    ----------------------------------------------- 

Toute idée ce que je fait de mal? Merci!

Répondre

0

Si vous voulez la dernière partie de la colonne, vous ne pouvez pas utiliser -1. Vous devez inverser la colonne et obtenir la première partie et inverser à nouveau:

reverse(split_part(reverse(col_A), '_'::text, 1))