2015-04-08 31 views
6

Mam ciągi takie jak "keepme: cutme" lub "string-bez-separator", które powinny stać się odpowiednio "keepme" i "string-bez-separator". Czy można to zrobić w PostgreSQL? Próbowałem:Wytnij ciąg po pierwszym wystąpieniu znaku

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

Ale to pozostawia w : i nie będzie działać, jeśli nie ma : w ciągu.

Odpowiedz

16

Zastosowanie split_part():

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

Zwraca cały ciąg Jeśli separator nie ma. Łatwo jest uzyskać drugą lub trzecią część itd.

Znacznie szybciej niż funkcje używające dopasowywania wyrażenia regularnego. A ponieważ mamy ustalony ogranicznik, nie potrzebujemy magii wyrażeń regularnych.

pokrewne:

1

regexp_replace() może być przeciążenie na co trzeba, ale również daje dodatkową korzyść regex. Na przykład, jeśli łańcuchy używają wielu ograniczników.

Przykład użycia:

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

SQL Select odebrać wszystko po ostatnim wystąpieniu znaku

select right('first:last', charindex(':', reverse('first:last')) - 1)