PostgreSQL以逗号分隔的值列表获取最后一个值

时间:2014-01-31 15:51:28

标签: sql postgresql

在PostgreSQL表中,我有一个类似

的列
AX,B,C
A,BD
X,Y
J,K,L,M,N

简而言之,每列记录的列中都会有一些逗号分隔的字符串。我想在每张唱片中得到最后一张。我最终得到了这个。

select id, reverse(substr(reverse(mycolumn),1,position(',' in reverse(mycolumn)))) from mytable order by id ; 

有更简单的方法吗?

3 个答案:

答案 0 :(得分:5)

使用regexp_replace

select id, regexp_replace(mycolumn, '.*,', '')
from mytable
order by id;

答案 1 :(得分:3)

我会这样做:

select reverse(split_part(reverse(myColumn), ',', 1))

答案 2 :(得分:2)

  

有更简单的方法吗?

根据您当前的数据,戈登的答案效果最好。其他选项可能是正则表达式(杂乱),或将列转换为text []数组,例如('{' || col || '}')::text[]或其变体。

如果您使用text []数组而不是列的纯文本,则需要直接使用数组函数:

select col[array_length(col, 1)]

http://www.postgresql.org/docs/current/static/functions-array.html

虚拟数据示例:

 with bar as (
 select '{a,b,c}'::text[] as foo
 )
 select foo[array_length(foo, 1)] from bar;

当然,您也可以创建parse_csv()函数或get_last_csv_value()函数,以避免编写上述内容。