2013-10-12 4 views
0

Мне нужно получить подстроку в строке без указания позиции с использованием SQL в PostgreSQL.Получить подстроку в SQL

Я попытался таким образом, но который отображается только последний номер «2»

Таким образом, я работал Строка является P1.B1.12

SELECT SUBSTRING(REGISTRATIONNO from '.(.)*') AS REGISTRATIONNO 
FROM SUBSCRIBER; 

Ожидаемый результат 12 - все после второго .

+0

И что желаемый результат? Какую подстроку вы хотите получить от значения 'P1.B1.12' –

+0

yep я хочу получить всю строку после секунды". " – Uday

+0

Является ли это значением после второго '.' или это« последнее »значение строки с разделителями« точка с разделителями »? Каким должен быть результат из «P1.B1.C1.14»? –

ответ

1
select (regexp_split_to_array(registrationno, '\.'))[3] 
from subscriber 

Заметим, что это предполагает, что требуемое значение всегда на третьей позиции. Если это не так, выражение вернет неправильное значение.

Вот SQLFiddle пример: http://sqlfiddle.com/#!12/d41d8/1924

+0

Наконец-то у меня есть решение. вы так много для вашего довольно ответ. – Uday

1

Вы можете попробовать это?

SELECT SUBSTRING(REGISTRATIONNO from '\w*.\w*.(\d+)') AS REGISTRATIONNO 
FROM SUBSCRIBER; 
+0

yep, но он не работает. :(Я хочу получить все содержимое после второго «.» в строке. – Uday

+0

Я немного изменил регулярное выражение. Можете ли вы попробовать еще раз? –

+0

Hello Lajos Veres , String будет что угодно, например: abcd.hi.1245, но после второго «.» Больше никаких точек не подходит для его единственного числа. – Uday

0

Может быть, вы можете попробовать это:

SELECT SUBSTRING_INDEX(REGISTRATIONNO, '.', -1) AS REGISTRATIONNO 
FROM SUBSCRIBER; 
+0

В Postgres нет функции 'substring_index' –

Смежные вопросы