2015-04-08 14 views
6

Ho stringhe come "keepme: cutme" o "string-without-separator" che dovrebbero diventare rispettivamente "keepme" e "string-without-separator". Questo può essere fatto in PostgreSQL? Ho provato:Taglia la stringa dopo la prima occorrenza di un carattere

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

Ma questo lascia il : e non funziona se non c'è : nella stringa.

risposta

16

Uso split_part():

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

Restituisce l'intera stringa se il delimitatore non c'è. Ed è semplice ottenere la 2a o 3a parte ecc.

Sostanzialmente più veloce delle funzioni utilizzando la corrispondenza delle espressioni regolari. E poiché abbiamo un delimitatore fisso, non abbiamo bisogno della magia delle espressioni regolari.

correlati:

1

REGEXP_REPLACE() potrebbe essere sovraccarico per quello che ti serve, ma dà anche il vantaggio aggiuntivo di regex. Ad esempio, se le stringhe utilizzano più delimitatori.

uso Esempio:

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

SQL Selezionare per raccogliere tutto dopo l'ultima occorrenza di un carattere

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