在字符最后一次出现之前提取字符串

时间:2018-09-06 14:45:56

标签: sql postgresql

我的规格:
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'),'.'))

我正在寻找一种更实用/更优雅的方法。 任何建议都很赞赏。

谢谢
佩雷斯。

2 个答案:

答案 0 :(得分:1)

使用a regular expression:

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)

DBFiddle Demo

如果您不喜欢LATERAL,只需复制粘贴:

SELECT c,
  (string_to_array(tab.c, '.'))[array_upper((string_to_array(tab.c, '.')), 1)-1]
FROM tab