2015-02-20 3 views
-1

У меня есть строка для изменения в соответствии с требованиями.Отобразить определенную часть строки в PostgreSQL 9.3

Например:

Данная строка:

str1 varchar = '123,456,789'; 

Я хочу показать строку как:

'456,789' 

Примечание: Первая часть (ограничена) с запятой , Я хочу удалить из строки и показать остальную строку.

В SQL Server я использовал функцию STUFF().

SELECT STUFF('123,456,789',1,4,''); 

Результат:

456,789 

Вопрос: Есть ли функция строки в PostgreSQL 9.3 версии, чтобы сделать ту же работу?

ответ

2

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

select substring('123,456,789' from ',(.*)$'); 

Запятая соответствует первой запятой найденной в строке. Часть внутри скобок (. *) Возвращается из функции. Символ $ означает конец строки.

альтернативное решение без регулярных выражений:

select str, substring(str from position(',' in str)+1 for length(str)) from 
(select '123,456,789'::text as str) as foo; 
+0

Отлично! Огромное спасибо. – MAK

1

Вы могли бы сначала превратить строку в массив и вернуть вторую и третью ячейку:

select array_to_string((regexp_split_to_array('123,456,789', ','))[2:3], ',') 

Или вы могли бы использовать подстроку-функции с регулярными выражениями (сопоставление образцов):

SELECT substring('123,456,789' from '[0-9]+,([0-9]+,[0-9]+)') 
  • [0-9] + означает один или несколько цифр
  • скобки говорят вернуть ту часть из строки

Оба решения работают на конкретной строке.

1

Ваш пример SQL Server указывает, что вы просто хотите, чтобы вы только удалили первые 4 символа, что делает ваш вопрос непонятным, потому что он полностью игнорирует то, что находится в строке. Имеются только позиции.

Как бы то ни было, простой и дешевый способ отрезать ведущих персонажей с right():

SELECT right('123,456,789', -4); 

SQL Fiddle.

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