SQL: SELECT, если поле имеет значения высоты и долготы

У меня есть адресная таблица следующим образом:

         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: Есть ли способ добиться этого?

0

Решение

Хм, простое замечание — у правильного адреса нет круглых скобок. Если это верно в ваших данных, вы можете использовать regexp_replace():

select regexp_replace(address, ' [(].*[)]', '')
from t;

Это просто удаляет что-либо между скобками. Если формат нежелательных данных более согласован, чем это, вы можете изменить регулярное выражение.

3

Другие решения

попробуй это :

update address set street=regexp_replace(street, '[(].*[)]', '') where street ~ '[(].*[)]'
0

По вопросам рекламы [email protected]