Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / поиск позиции в массиве где встречается определенный шаблон / 3 сообщений из 3, страница 1 из 1
18.02.2016, 08:41
    #39173739
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск позиции в массиве где встречается определенный шаблон
помогите найти позицию в массиве где впервые встречается в тексте символ не равный плюсу и извлечь цифру по этой позиции
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with 	
test as (select 1 as id, '{1+,3+,4!,9-}'::text[] as polem
union select 2 as id, '{2+,4-,9-,16-}'::text[] as polem
union select 3 as id, '{1+,10+,15+,14+}'::text[] as polem
union select 4 as id, '{10К,21-}'::text[] as polem
)
    select id, ???, -- позиция элемента в массиве в котором впервые встречается не плюс (если нет то null)
        ??? -- какая цифра в элементе где впервые по порядку встречается не плюс
    from test as q

результат должен быть таким
ИДпозиция где не плюсцифра где не плюс1342243nullnull4110
...
Рейтинг: 0 / 0
18.02.2016, 09:33
    #39173783
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск позиции в массиве где встречается определенный шаблон
Legushka,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
with 	
test as (select 1 as id, '{1+,3+,4!,9-}'::text[] as polem
union select 2 as id, '{2+,4-,9-,16-}'::text[] as polem
union select 3 as id, '{1+,10+,15+,14+}'::text[] as polem
union select 4 as id, '{10К,21-}'::text[] as polem
)

SELECT
  id,
  -- polem,
  /*
  (SELECT (bb.zz, polem[bb.zz]) 
   FROM generate_series(array_lower(polem, 1), array_upper(polem, 1)) bb(zz) 
   WHERE polem[bb.zz] NOT LIKE '%+%'
   ORDER BY bb.zz
   LIMIT 1) AS ff,
  */
  (SELECT bb.zz 
   FROM generate_series(array_lower(polem, 1), array_upper(polem, 1)) bb(zz) 
   WHERE polem[bb.zz] NOT LIKE '%+%'
   ORDER BY bb.zz
   LIMIT 1) AS f1,
  (SELECT substring(polem[bb.zz] FROM '(\d+)')  
   FROM generate_series(array_lower(polem, 1), array_upper(polem, 1)) bb(zz) 
   WHERE polem[bb.zz] NOT LIKE '%+%'
   ORDER BY bb.zz
   LIMIT 1) AS f2
FROM test AS q
ORDER BY id

...
Рейтинг: 0 / 0
18.02.2016, 11:19
    #39173903
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск позиции в массиве где встречается определенный шаблон
ursido, спасибо большущее

я принцип понял.
извлек так же состояние по позиции: '(\D)',
смог найти последний удачный "+" в серии:
polem[bb.zz] LIKE '%+%' и меняем сортировку что бы с конца

и т.п.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / поиск позиции в массиве где встречается определенный шаблон / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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