2016-07-13 13 views
0

Wir haben eine Spalte in der Datenbank mit Werten ähnlich wie "150 W 96 Th St" und "4514 282 Nd St". Wie Sie vielleicht schon bemerkt haben, gibt es ein Leerzeichen zwischen dem numerischen Straßennamen und dem Suffix "96 TH".Wie regexp_replace zu ersetzen nur die einfangende Gruppe und nicht die vollständige übereinstimmende Zeichenfolge

Ich versuche eine Postgresql-Abfrage zu schreiben, die diesen Speicherplatz entfernen wird. die Verwendung von folgendem:

SELECT regexp_matches('150 W 96 Th St', ' \d+()(?:St|Nd|Rd|Th) ') 

ich:

{" "} 

Zeigen, dass nur die Erfassungsgruppe zurückgegeben.

Allerdings, wenn ich

SELECT regexp_replace('150 W 96 Th St', ' \d+()(?:St|Nd|Rd|Th) ', '') 

laufe ich

150 WSt 

, wo der ganze passende String ersetzt wird.

Ich habe auch versucht,

SELECT regexp_replace('150 W 96 Th St', ' \d+()(?:St|Nd|Rd|Th) ', '\1') 

, die ich dachte, dass nur die erste Capture-Gruppe ersetzen.

Was sollte ich noch versuchen?

Antwort

2

Legen Sie die Erfassungsgruppen um die Dinge, die Sie behalten möchten, und verweisen Sie sie dann in der Ersetzungszeichenfolge.

SELECT regexp_replace('150 W 96 Th St', '(\d+) (St|Nd|Rd|Th)', '\1\2') 
+0

Sie, Herr, sind ein Gentleman und ein Gelehrter. Klappt wunderbar. –

Verwandte Themen