【问题标题】:SQL: SELECT if field has altitude and longitude valuesSQL:如果字段具有高度和经度值,则选择
【发布时间】:2016-04-20 11:14:23
【问题描述】:

我有一个地址表如下:

         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 '*(';

但是我弄错了我什至不知道如何纠正。

问:有什么方法可以实现吗?

【问题讨论】:

标签: php sql postgresql psql


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多