[英]PostgreSQL get last value in a comma separated list of values
在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 ;
有更容易的方法嗎?
使用regexp_replace
:
select id, regexp_replace(mycolumn, '.*,', '')
from mytable
order by id;
我會這樣:
select reverse(split_part(reverse(myColumn), ',', 1))
有更容易的方法嗎?
使用當前數據,Gordon的答案最適合imo。 其他選項將是正則表達式(混亂),或將列轉換為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()
函數來避免編寫上述內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.