У меня есть адресная таблица следующим образом:
Column | Type | Modifiers
------------------------+--------------------------+------------------------------------------------------------
id | integer | not null default nextval('venue_address_id_seq'::regclass)
street | character varying | not null
number | character varying |
zip | character varying |
state | character varying |
country | character varying |
location | point |
venue_id | integer | not null
created_at | timestamp with time zone |
created_by | json |
updated_at | timestamp with time zone |
updated_by | json |
city_id | integer |
name | character varying |
district_id | bigint |
deleted | boolean | not null default false
location_email | character varying |
participant_list_email | character varying |
Поле улицы в некоторых строках содержит недопустимые данные, которые необходимо исправить, это: значения высоты и долготы.
Следующим образом
SELECT street from address where id=10;
Результат:
id | street
----+----------------------
1 | Paseo de la Castellana, 75 (40°26'42.4"N 3°41'33.7"W)
2 | Calle Anil, 21 (40.456744,-3.616466)
3 | Correct address, 55
(2 rows)
Я хочу просто сохранить название улицы и номер, но удалить значения высоты и долготы, как 3-я правильная запись
Я использую СУБД postgres. Я пытался найти неправильные:
select id, street from venue_address WHERE street like '*(';
Но я даже не знаю, как исправить после получения неправильных.
Q: Есть ли способ добиться этого?
Хм, простое замечание — у правильного адреса нет круглых скобок. Если это верно в ваших данных, вы можете использовать regexp_replace()
:
select regexp_replace(address, ' [(].*[)]', '')
from t;
Это просто удаляет что-либо между скобками. Если формат нежелательных данных более согласован, чем это, вы можете изменить регулярное выражение.
попробуй это :
update address set street=regexp_replace(street, '[(].*[)]', '') where street ~ '[(].*[)]'