2009-06-01 14 views
6

He los datos siguientes en mi "Street_Address_1" columna:consulta PostgreSQL para actualizar los campos usando una expresión regular

123 Main Street

Uso de PostgreSQL, ¿cómo iba a escribir una consulta para actualizar la columna "Street_Name" en mi tabla de direcciones? En otras palabras, "Street_Name" está en blanco y me gustaría llenarlo con el valor del nombre de la calle que figura en la columna "Street_Address_1".

Por lo que puedo decir, me gustaría utilizar el método de cadena "regexp_matches". Lamentablemente, no he tenido mucha suerte.

NOTA: Puede suponer que todas las direcciones tienen el formato "StreetNumber StreetName StreetType".

Respuesta

11

Algo así como ...:

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

Ver relevant section from PGSQL 8.3.7 docs, la forma substring se detalla poco después del comienzo de la sección.

+0

No hubo suerte con esa expresión regular. Estoy luchando con la expresión regular en este caso más que la consulta. – Huuuze

+0

Más bien como '^ [0-9] + ([a-zA-Z] +)' –

+0

Devuelve la parte "123 Principal" de la dirección. Yo estrictamente quiero "Principal". – Huuuze

12

Si lo que desea es tomar Street_Address_1 y tira a cualquier número de líderes, se puede hacer esto:

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

Esta toma el valor en street_address_1 y reemplaza cualquier cadena líder de los números (además de un espacio único) con una cadena vacía (el cuarto parámetro es para indicadores de expresiones regulares opcionales como "g" (global) e "i" (no distingue entre mayúsculas y minúsculas)).

Esta versión permite que cosas como "1212 15th Street" funcionen correctamente.

Cuestiones relacionadas