SQL:如果字段具有高度和经度值,则选择


SQL: SELECT if field has altitude and longitude values

我有一个地址表,如下所示:

         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)

我只想保留街道名称和编号,但删除海拔和经度值,就像第三个正确的记录一样

我正在使用postgres DBMS。我的尝试是找到错误的:

select id, street from venue_address WHERE street like '*(';

但是,我甚至不知道如何纠正后,得到了错误的。

问:有什么方法可以做到这一点吗?

嗯,一个简单的观察结果是,一个正确的地址没有括号。如果你的数据中是这样的,你可以使用regexp_replace():

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

这只是删除括号之间的任何内容。如果不需要的数据的格式比这更一致,则可以修改正则表达式。

试试这个:

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