2016-04-20 2 views
0

ich eine Adresstabelle, wie folgend haben:SQL: SELECT, wenn Feldwerte Höhe und Länge hat

  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  | 

Straßenfeld in einigen Zeilen enthält ungültige Daten, die korrigiert werden muss, sind diese Daten: Höhe und Länge Werte .

Wie folgenden

SELECT street from address where id=10; 

Ergebnis:

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) 

Ich möchte nur die Straßennamen halten und die Anzahl, sondern entfernen Werte Höhe und Länge, wie der 3. korrekte Datensatz

Ich bin Verwenden von Postgres DBMS. Mein Versuch war, die falschen zu finden:

Aber ich weiß nicht einmal, wie man korrigiert, nachdem man die falschen bekommen hat.

Q: Gibt es eine Möglichkeit, dies zu erreichen?

+0

PgSQL hat native Unterstützung von [regulären Ausdrücke] (http://www.postgresql.org/docs/9.3/static/functions-matching.html) ... Das könnten Sie versuche, '~' operator anstelle von 'LIKE' zu verwenden. – BlitZ

Antwort

3

Hmmm, eine einfache Beobachtung ist, dass eine korrekte Adresse keine Klammern hat. Wenn dies in Ihren Daten wahr ist, können Sie regexp_replace() verwenden:

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

Dies entfernt nur etwas in Klammern. Wenn das Format der unerwünschten Daten konsistenter ist als das, können Sie den regulären Ausdruck überarbeiten.

0

try this:

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