Убрать дублирующие записи в строке таблицы

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Убрать дублирующие записи в строке таблицы

Сообщение HasT » 02 сен 2014, 10:34

Добрый день!
Есть таблица с данными в столбце:
  • name
    УЛИЦА ТЕЛЬМАНАУЛИЦА ТЕЛЬМАНА
    1-Я УЛИЦА ЧАПАЕВА1-Я УЛИЦА ЧАПАЕВА
    СОВХОЗНАЯ УЛИЦА (НОВЫЕ ЛАПСАРЫ)СОВХОЗНАЯ УЛИЦА (НОВЫЕ ЛАПСАРЫ)
    УСАДСКАЯ УЛИЦАУСАДСКАЯ УЛИЦА
    УЛИЦА 139-Й СТРЕЛКОВОЙ ДИВИЗИИУЛИЦА 139-Й СТРЕЛКОВОЙ ДИВИЗИИ
    УЛИЦА ЛЕРМОНТОВАУЛИЦА ЛЕРМОНТОВА
    УЛИЦА ЛЕБЕДЕВАУЛИЦА ЛЕБЕДЕВА
    УЛИЦА КОСМОНАВТА НИКОЛАЕВА А.Г.УЛИЦА КОСМОНАВТА НИКОЛАЕВА А.Г.
    МАШИНОСТРОИТЕЛЕЙ ПРОЕЗДМАШИНОСТРОИТЕЛЕЙ ПРОЕЗД
Как удалить дублирующийся текст в каждой строке колонки name?
Данные в shp-файле. Используемое ПО: ArcGIS, QGIS, PostgreSQL/PostGIS

Таблица для PostgreSQL:

Код: Выделить всё

CREATE TABLE test(name TEXT);

INSERT INTO test(name) VALUES('УЛИЦА ТЕЛЬМАНАУЛИЦА ТЕЛЬМАНА');
INSERT INTO test(name) VALUES('1-Я УЛИЦА ЧАПАЕВА1-Я УЛИЦА ЧАПАЕВА');
INSERT INTO test(name) VALUES('СОВХОЗНАЯ УЛИЦА (НОВЫЕ ЛАПСАРЫ)СОВХОЗНАЯ УЛИЦА (НОВЫЕ ЛАПСАРЫ)');
INSERT INTO test(name) VALUES('УСАДСКАЯ УЛИЦАУСАДСКАЯ УЛИЦА');
INSERT INTO test(name) VALUES('УЛИЦА 139-Й СТРЕЛКОВОЙ ДИВИЗИИУЛИЦА 139-Й СТРЕЛКОВОЙ ДИВИЗИИ');
INSERT INTO test(name) VALUES('УЛИЦА ЛЕРМОНТОВАУЛИЦА ЛЕРМОНТОВА');
INSERT INTO test(name) VALUES('УЛИЦА ЛЕБЕДЕВАУЛИЦА ЛЕБЕДЕВА');
INSERT INTO test(name) VALUES('УЛИЦА КОСМОНАВТА НИКОЛАЕВА А.Г.УЛИЦА КОСМОНАВТА НИКОЛАЕВА А.Г.');
INSERT INTO test(name) VALUES('МАШИНОСТРОИТЕЛЕЙ ПРОЕЗДМАШИНОСТРОИТЕЛЕЙ ПРОЕЗД');
Спасибо!

HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Re: Убрать дублирующие записи в строке таблицы

Сообщение HasT » 02 сен 2014, 11:16

Есть решение:
PostgreSQL:

Код: Выделить всё

SELECT REGEXP_REPLACE (name,'(.*)\1','\1','ig')
FROM test
ArcGIS:
Сделать поле Len и применить Len( [ST_NAME] )
Затем в новом результирующем поле Left( [ST_NAME], [Len]/2 )

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя