найти n-ю позицию указанного c символа в строке в Postgres - PullRequest
0 голосов
/ 08 июля 2020

Я использую Postgres 9,6

У меня есть список различных кодов классов. Вот:

«Что у меня есть» и «что я хочу»

что у меня есть -> что я хочу.

Equip:Mold         --> Equip:Mold
Raw:Resin:TPA      --> Raw:Resin 
FG                 --> FG
...

Моя стратегия достижения sh это для написания определяемой пользователем функции, которая найдет количество символов 2nd ':' в моем списке, а затем используйте функцию LEFT с LEFT('Raw:Resin:TPA',nthpositionget('Raw:Resin:TPA',':',2))

Я попытался использовать следующий вопрос, но безрезультатно . Postgres: извлечь текст до N-го символа в строке

1 Ответ

1 голос
/ 08 июля 2020

Эту общую проблему лучше всего решить с помощью regexp_replace():

select regexp_replace('Raw:Resin:TPA', '(^.*:.*):', '\1');
 regexp_replace 
----------------
 Raw:ResinTPA
(1 row)

select regexp_replace('Equip:Mold', '(^.*:.*):', '\1');
 regexp_replace 
----------------
 Equip:Mold
(1 row)

select regexp_replace('FG', '(^.*:.*):', '\1');
 regexp_replace 
----------------
 FG
(1 row)

Если вам нужно что-то, что находит n-е вхождение подстроки, то что-то вроде этого можно преобразовать в функцию:

with invar as (
  select 'Raw:Resin:TPA' as a, ':' as d
)
select case
         when length(array_to_string((string_to_array(a, d))[1:2], d)) = length(a) then -1
         else length(array_to_string((string_to_array(a, d))[1:2], d)) + 1
       end
 from invar;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...