Извлечь строку перед последним появлением символа - PullRequest
0 голосов
/ 06 сентября 2018

Мои характеристики:
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 голосов
/ 06 сентября 2018

Используйте регулярное выражение:

select substring('ab.cde.fghi' from '(.*)\.')

 substring 
-----------
 ab.cde
(1 row)
0 голосов
/ 06 сентября 2018

Вы можете использовать массивы:

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

Демоверсия DBFiddle

А если вам не нравится LATERAL, просто скопируйте и вставьте:

SELECT c,
  (string_to_array(tab.c, '.'))[array_upper((string_to_array(tab.c, '.')), 1)-1]
FROM tab
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...