powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти позицию скобки
5 сообщений из 5, страница 1 из 1
Найти позицию скобки
    #39331425
4wel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как в строке найти позицию закрывающей скобки?

например строка:
select '15+50/(10+10*(5+5))' from dual

нужно чтоб выводило что-то вида

row | in | out
1 | 7 |19
2 | 14 | 18
...
Рейтинг: 0 / 0
Найти позицию скобки
    #39331431
4wel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4wel,

лучше пример

select '15+50/(10+10*(5+5))+(20+30)' from dual

row | in | out
1 | 7 |19
2 | 14 | 18
3 | 21 | 26
...
Рейтинг: 0 / 0
Найти позицию скобки
    #39331450
цикля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4welПодскажите как в строке найти позицию закрывающей скобки? чтением слева направо и запастись стековой памятью.
...
Рейтинг: 0 / 0
Найти позицию скобки
    #39331493
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4wel,

например, см. там 5590444
...
Рейтинг: 0 / 0
Найти позицию скобки
    #39332008
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4wel,

Код: plsql
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
SQL> select  *
  2    from  tbl
  3  /

STR
------------------------------
15+50/(10+10*(5+5))+(20+30)

with r(
       rid,
       str,
       in_pos,
       out_pos
      ) as (
             select  rowid rid,
                     regexp_replace(
                                    str,
                                    '[^()]',
                                    ' '
                                   ) str,
                     0,
                     0
               from  tbl
            union all
             select  rid,
                     regexp_replace(str,'\(( +)\)',' \1 ',1,1),
                     regexp_instr(str,'\( +\)'),
                     regexp_instr(str,'\( +\)',1,1,1) - 1
               from  r
               where regexp_instr(str,'\( +\)') != 0
           )
select  row_number() over(partition by rid order by in_pos) row_num,
        in_pos,
        out_pos
  from  r
  where in_pos > 0
  order by rid,
           in_pos
/

   ROW_NUM     IN_POS    OUT_POS
---------- ---------- ----------
         1          7         19
         2         14         18
         3         21         27

SQL> 



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


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