我的规格:
Postgres 9.6.6,最新的Ubuntu LTS
我需要在最后一次出现角色之前吸引一部分练习:
例如带有“。”
'ab.cde.fghi' -> 'ab.cde'
此刻是我的代码:
select
substr('ab.cde.fghi',1,length('ab.cde.fghi')-strpos(reverse('ab.cde.fghi'),'.'))
我正在寻找一种更实用/更优雅的方法。 任何建议都很赞赏。
谢谢
佩雷斯。
答案 0 :(得分:1)
select substring('ab.cde.fghi' from '(.*)\.')
substring
-----------
ab.cde
(1 row)
答案 1 :(得分:0)
您可以使用数组:
SELECT c, sub.arr[array_upper(arr, 1)-1]
FROM tab
,LATERAL (SELECT string_to_array(tab.c, '.'))sub(arr)
如果您不喜欢LATERAL
,只需复制粘贴:
SELECT c,
(string_to_array(tab.c, '.'))[array_upper((string_to_array(tab.c, '.')), 1)-1]
FROM tab