2017-10-16 5 views
0

Je suis complètement nouveau à ce sujet et je suis juste en train de pirater, mais j'essaie de sortir une adresse qui précède le nom de la ville et le mettre dans une nouvelle colonne. J'essaie d'utiliser la sous-chaîne dynamiquement, mais je me perds avec la syntaxe. Des idées sur où me pointer?Rechercher dynamiquement une colonne à un nom statique et extraire l'adresse à une nouvelle colonne dans Postgres/GIS

+0

Vous avez une colonne avec des données '1212 Main Street, Centerview, Oregon' et vous essayez d'extraire '1212 Main Street' et de mettre cela dans une autre colonne? S'il vous plaît fournir plus de détails – pbuck

+0

Oui, et le nom de la ville est tous les mêmes. Je ne peux pas faire de longueur car les noms d'adresses sont de tailles différentes. – MjonesGEO

Répondre

0

Vous devriez probablement regarder substr avec l'expression régulière. Supposons que votre table soit une colonne 'full_address', avec les informations sur la rue, la ville et l'état. Vous ajoutez une nouvelle colonne simplement appelée street_address, et vous voulez extraire l'adresse de chaque rangée et la placer dans la colonne street_address. D'abord, considérez comment extraire l'adresse municipale de la colonne full_address. Peut-être cette expression régulière, où briser l'adresse en virgule séparée <street_address>,<city>,<state>.

(.*),[^,]*,[^,]* 

qui dit simplement:

capture anything  -- the street address 
comma     -- exact match on a comma 
anything not a comma -- the city, assuming no commas allowed in city 
comma     -- exact match on a second comma 
anything not a comma -- the state. 

(De toute évidence, vous avez besoin de trouver un regex utile pour vos données).

Compte tenu d'une expression rationnelle, vous pouvez voir vos adresses de rue comme:

SELECT SUBSTRING(full_address FROM '(.*),[^,]*,[^,]*') FROM my_table; 

En supposant que le regex capte ce que vous voulez, vous pouvez faire une mise à jour en utilisant:

UPDATE my_table SET street_address = SUBSTRING(full_address FROM '(.*),[^,]*,[^,]*');