Запрос Postgresql для обновления полей с помощью регулярного выражения - PullRequest
8 голосов
/ 02 июня 2009

В моем столбце "Street_Address_1" есть следующие данные:

123 Мейн-стрит

Используя Postgresql, как мне написать запрос на обновление столбца "Street_Name" в моей таблице адресов? Другими словами, "Street_Name" пусто, и я хотел бы заполнить его значением названия улицы, содержащимся в столбце "Street_Address_1".

Из того, что я могу сказать, я хотел бы использовать строковый метод "regexp_matches". К сожалению, мне не очень повезло.

ПРИМЕЧАНИЕ. Можно предположить, что все адреса имеют формат «StreetNumber StreetName StreetType».

Ответы [ 2 ]

14 голосов
/ 29 декабря 2009

Если вы просто хотите взять Street_Address_1 и убрать любые начальные числа, вы можете сделать это:

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

Принимает значение в street_address_1 и заменяет любую начальную строку чисел (плюс один пробел) пустой строкой (четвертый параметр для необязательных флагов регулярных выражений, таких как "g" (глобальный) и "i" (без учета регистра) )).

Эта версия позволяет работать таким вещам, как "1212 15th Street".

12 голосов
/ 02 июня 2009

Что-то вроде ...:

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

См. соответствующий раздел документации по PGSQL 8.3.7 , форма substring подробно описана вскоре после начала раздела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...