2009-06-01 6 views
6

je les données suivantes dans mon « Street_Address_1 » colonne:requête Postgresql de mettre à jour les champs en utilisant une expression régulière

123 Main Street

Utilisation Postgresql, comment pourrais-je écrire une requête de mise à jour la colonne "Street_Name" dans ma table d'adresses? En d'autres termes, "Street_Name" est vide et je voudrais le remplir avec la valeur du nom de la rue contenue dans la colonne "Street_Address_1". De ce que je peux dire, je voudrais utiliser la méthode de chaîne "regexp_matches". Malheureusement, je n'ai pas eu beaucoup de chance.

REMARQUE: Vous pouvez supposer que toutes les adresses sont au format "StreetNumber StreetName StreetType".

Répondre

11

Quelque chose comme ...:

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

Voir relevant section from PGSQL 8.3.7 docs, la forme substring est peu détaillé après le début de la section.

+0

Pas de chance avec cette regex. Je me bats avec l'expression rationnelle dans ce cas plus que la requête. – Huuuze

+0

Plus comme '^ [0-9] + ([a-zA-Z] +)' –

+0

Cela retourne la partie "123 Main" de l'adresse. Je veux strictement "Main". – Huuuze

12

Si vous voulez juste prendre Street_Address_1 et dépouiller les numéros principaux, vous pouvez le faire:

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

Cela prend la valeur street_address_1 et remplace toute chaîne leader de chiffres (plus un seul espace) avec une chaîne vide (le quatrième paramètre est pour les drapeaux regex optionnels comme "g" (global) et "i" (insensible à la casse)).

Cette version permet à des choses comme "1212 15th Street" de fonctionner correctement.

Questions connexes