2009-06-01 16 views
6

ho i seguenti dati nella mia colonna "Street_Address_1":di query PostgreSQL per aggiornare i campi utilizzando un'espressione regolare

123 Main Street

Uso PostgreSQL, come potrei scrivere una query per aggiornare la colonna "Street_Name" nella mia tabella Indirizzi? In altre parole, "Street_Name" è vuoto e mi piacerebbe popolarlo con il valore del nome della via contenuto nella colonna "Street_Address_1".

Da quello che posso dire, vorrei utilizzare il metodo di stringa "regexp_matches". Sfortunatamente, non ho avuto molta fortuna.

NOTA: è possibile assumere che tutti gli indirizzi siano in un formato "StreetNumber StreetName StreetType".

risposta

11

Qualcosa di simile ...:

UPDATE table 
SET Street_Name = substring(Street_Address_1 FROM '^[0-9]+ ([a-zAZ]+) ') 

Vedi relevant section from PGSQL 8.3.7 docs, la forma substring è dettagliato poco dopo l'inizio della sezione.

+0

Non ho fortuna con quella regex. Sto lottando con la regex in questo caso più della query. – Huuuze

+0

Più come '^ [0-9] + ([a-zA-Z] +)' –

+0

Che restituisce la parte "123 Main" dell'indirizzo. Voglio assolutamente "Main". – Huuuze

12

Se si vuole solo prendere Street_Address_1 e togliere tutti i numeri principali, si può fare questo:

UPDATE table 
SET street_name = regexp_replace(street_address_1, '^[0-9]* ','',''); 

questo prende il valore in street_address_1 e sostituisce qualsiasi stringa leader di numeri (più un unico spazio) con una stringa vuota (il quarto parametro è per i regex opzionali come "g" (globale) e "i" (senza distinzione tra maiuscole e minuscole)).

Questa versione consente il funzionamento corretto di "1212 15th Street".

Problemi correlati