Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выделить часть строки / 11 сообщений из 11, страница 1 из 1
23.07.2019, 08:40
    #39840294
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
Добрый день.
Помогите, пожалуйста, со следующей проблемой.
Есть столбец с адресами. Бывает адреса указаны с индексом, бывает без индекса:
675901, Амурская обл, Благовещенский р-н, Владимировка с., дом 1
Амурская обл, Благовещенский р-н, Владимировка с., дом 1

Нужно написать следующее:
- если адрес без индекса, то вывести его целиком;
- если с индексом, то вот эту часть "675901, " нужно отсечь и вывести адрес, начиная с девятого символа.

Пробовала искать позицию первой цифры в строке position('[0-9]' in ea.adr_adm_ter), выдает все время 0
Пробовала удалять цифры слева с помощью функции ltrim (ea.adr_adm_ter, '[0-9]'), ничего вообще не делает.

Подскажите, пожалуйста, как это можно сделать.
...
Рейтинг: 0 / 0
23.07.2019, 09:02
    #39840298
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
*Ann*,
Как-то так:
Код: sql
1.
select (regexp_match('675901, Амурская обл, Благовещенский р-н, Владимировка с., дом 1','^(\d+[,]?\s)?(.*$)'))[2] 
...
Рейтинг: 0 / 0
23.07.2019, 09:37
    #39840307
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
Выдается сообщение, что не существует такой функции
...
Рейтинг: 0 / 0
23.07.2019, 10:04
    #39840322
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
Если сделать так:
regexp_matches(ea.adr_adm_ter,'^(\d+[,]?\s)?(.*$)')
то выдается тот же адрес, только в фигурных скобках.

[2] - это что означает?
...
Рейтинг: 0 / 0
23.07.2019, 11:06
    #39840356
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
*Ann*,

*Ann*[2] - это что означает?
индекс элемента массива
...
Рейтинг: 0 / 0
23.07.2019, 11:17
    #39840374
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
Если пишу так:
regexp_matches(ea.adr_adm_ter,'^(\d+[,]?\s)?(.*$)')[2]
выдается syntax error at or near "["

Подскажите, пожалуйста, где ошибка?
...
Рейтинг: 0 / 0
23.07.2019, 11:23
    #39840376
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
*Ann*,

скобки вокруг вызова функции верните, они нужны для обращения к элементу массива.
...
Рейтинг: 0 / 0
23.07.2019, 11:23
    #39840377
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
*Ann*,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with _data( adr_adm_ter)

as (values('675901	
	Амурская обл, Благовещенский р-н, Владимировка с., дом 1')
,('675901, Амурская обл, Благовещенский р-н, Владимировка с., дом 1')
)

select TRIM(RM[1],E', \t\r\n'),TRIM(RM[2],E', \t\r\n') 
,ltrim(adr_adm_ter, E'0123456789, \t\r\n')
,regexp_replace (adr_adm_ter,'^[0-9]{6}\s*,?\s*','')
FROM _data,lateral regexp_matchES(adr_adm_ter,'^(\d+[,]?\s)?(.*$)') AS RM



помедитируйте
...
Рейтинг: 0 / 0
23.07.2019, 22:07
    #39840742
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
Код: sql
1.
2.
3.
4.
5.
WITH sub AS (SELECT substring('123456, oooo, address...', 1, 6) AS idx)

SELECT idx::int
FROM sub
WHERE idx ~ '^\d{6}$';
...
Рейтинг: 0 / 0
24.07.2019, 02:30
    #39840757
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
*Ann*Выдается сообщение, что не существует такой функции

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
laiba=> \c byada
Вы подключены к базе данных "byada" как пользователь "wrongel".
byada=> select (regexp_matches(' Амурская обл, Благовещенский р-н, Владимировка с., дом 1','^(\d+[,]?\s)?(.*$)'))[2] ;
                      regexp_matches                       
-----------------------------------------------------------
  Амурская обл, Благовещенский р-н, Владимировка с., дом 1
(1 строка)

byada=> select (regexp_matches('3984486443, Амурская обл, Благовещенский р-н, Владимировка с., дом 1','^(\d+[,]?\s)?(.*$)'))[2] ;
                      regexp_matches                      
----------------------------------------------------------
 Амурская обл, Благовещенский р-н, Владимировка с., дом 1
(1 строка)

byada=> 


Но регексп нужно дополнить - он пропустит скажем разделители в индексе.
...
Рейтинг: 0 / 0
24.07.2019, 10:22
    #39840806
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить часть строки
Спасибо!
Получилось вот так:
select (regexp_matches('3984486443, Амурская обл, Благовещенский р-н, Владимировка с., дом 1','^(\d+[,]?\s)?(.*$)'))[2] ;
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выделить часть строки / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]