powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбрать часть строки
3 сообщений из 3, страница 1 из 1
Выбрать часть строки
    #40103597
zorlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Такая проблема.

Есть две строки

select '-DSR_PMT(32601, 32603)' from dual

select 'KSR_PMT(32602, 32604)' from dual


Та или иная строка приходит в одну переменную.

Как при этом выбрать первое значение в скобочках, затем второе значение в скобочках?


То есть как сделать 4 селекта from dual, чтобы из каждой строки выбрать сначала первое значение в скобочках, затем второе значение в скобочках?

Правильно будет написать через regexp_replace? Типа взять значение в 5 символов после первой скобочки, затем взять значение в 5 символов после второй скобочки?

regexp_replace
...
Рейтинг: 0 / 0
Выбрать часть строки
    #40103615
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with t(s) as (
select '-DSR_PMT(32601, 32603)' from dual union all
select 'KSR_PMT(32602, 32604)' from dual
)
select
-- instr/substr, обратите внимание на отрицательную позицию 
            substr(s,instr(s,'(')+1,5)
    ||':'|| substr(s,-6,5)
-- regexp, обратите внимание на параметр вхождение
    ||':'|| regexp_substr(s,'\d{5,5}',1,1)
    ||':'|| regexp_substr(s,'\d{5,5}',1,2) as info
--  можно так, для чисел произвольной длинны: regexp_substr(s,'\d+',1,2) as info
from t
/
INFO
-----------------------------------------------
32601:32603:32601:32603
32602:32604:32602:32604



regexp_replace проще, но тяжелее при выполнении
Для двух строчек некритично, но если строк будет миллионы, то просадка ощутимая

Ну и в зависимости от задачи, ответ будет разный, тут пример для пятизнаков, если числа будут разные, или форматирование/пробелы будут плавать, нужно будет собирать конструкцию

instr
substr

Ну и на будущее:
памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)

2) Подготовьте тестовые данные, лучше в виде with
пример (не ваш случай) в конце

3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)

4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение

Пример подготовленных данных, запроса и вывода.
Код: 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.
-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
select
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;

TXT
--------------------------------------------------------------------------------
1923-02-11 23:04:00   Bob: Hi
1923-02-11 23:05:23     Max: Hi
1923-02-11 23:06:21       Bob: Bye
1923-02-11 23:05:35     Jon: Hi
1923-02-11 23:06:00       Bob: How are you
1923-02-11 23:07:05       Max: All right!
1923-02-11 23:04:37         Bob: Bye
1923-02-11 23:08:56   Max: Hmm

8 rows selected.
...
Рейтинг: 0 / 0
Выбрать часть строки
    #40103721
zorlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

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


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