2015-04-08 3 views
6

У меня есть строки типа 'keepme: cutme' или 'string-without-separator', которые должны стать соответственно 'keepme' и 'string-without-separator'. Можно ли это сделать в PostgreSQL? Я пробовал:Вырезать строку после первого появления символа

select substring('first:last' from '.+:') 

Но это оставляет : в и не будет работать, если не будет в строке нет :.

ответ

16

Использование split_part():

SELECT split_part('first:last', ':', 1) AS first_part 

Возвращает всю строку, если разделитель не существует. И легко получить 2-ю или 3-ю часть и т. Д.

По существу быстрее, чем функции, использующие регулярное выражение. И поскольку у нас есть фиксированный разделитель, нам не нужна магия регулярных выражений.

Похожие:

1

REGEXP_REPLACE() может быть перегрузка за то, что вам нужно, но это также дает дополнительное преимущество регулярных выражений. Например, если строки используют несколько разделителей.

Пример использования:

select regexp_replace('first:last', E':.*', ''); 
0

SQL Select, чтобы выбрать все после последнего вхождения символа

select right('first:last', charindex(':', reverse('first:last')) - 1) 
Смежные вопросы