Как найти первые и последние случаи определенного символа в строке в PostgreSQL

Я хочу найти первое и последние вхождения определенного символа в строке. Как пример, считайте строку названной "2010-####-3434" и предположите, что символ, который будет разыскиваться, является "#". Первое вхождение хеша в строке в 6-м положении, и последнее вхождение в 9-м положении.

6
задан MD Sayem Ahmed 3 June 2010 в 11:56
поделиться

3 ответа

Я не знаю, как это сделать, но функции регулярных выражений, такие как regexp_matches, regexp_replace, regexp_split_to_array, могут быть альтернативным путем к решению вашей проблемы

.
1
ответ дан 8 December 2019 в 03:38
поделиться

Что ж ...

Select position('#' in '2010-####-3434');

даст вам первое. Если вы хотите последнее, просто запустите это снова с обратной стороной вашей строки. Обратную строку pl / pgsql можно найти здесь .

Select length('2010-####-3434') - position('#' in reverse_string('2010-####-3434')) + 1;
16
ответ дан 8 December 2019 в 03:38
поделиться

Эта чистая функция SQL предоставит последнюю позицию символа внутри строки, считая от 1. Она возвращает 0, если не найдена ... Но (большой отказ от ответственности) она прерывается, если символ является некоторым метасимволом регулярного выражения ( . $ ^ () [] * + )

CREATE FUNCTION last_post(text,char) RETURNS integer AS $$ 
     select length($1)- length(regexp_replace($1, '.*' || $2,''));
$$ LANGUAGE SQL IMMUTABLE;

test=# select last_post('hi#-#-#byte','#');
 last_post
-----------
         7

test=# select last_post('hi#-#-#byte','a');
 last_post
-----------
         0

Более надежное решение будет включать pl / pgSQL, как ответ rfusca.

2
ответ дан 8 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: