Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярные выражения / 9 сообщений из 9, страница 1 из 1
15.11.2019, 12:04
    #39889479
nnmserg11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Всем привет!

Есть строка, в которой основная информация о товаре через пробелы написана. Цель - выделить каждую характеристику в столбец для отчета.

Первые данные я выдернул - REGEXP_SUBSTR (description,'(\S*)') as param_1

Вопрос - как собственно выдергивать следующие пару параметров от пробела до пробела, не включая пробелы (ну или отрезать их как я ниже)?
Максимально подходящее только придумал что-то типа ltrim(REGEXP_SUBSTR(description,'(\s)(\w*)')) as param_2

И второй момент - посоветуйте, что почитать про регулярки? Я не первый раз долго сижу, и, видимо где-то понимаю не так и поэтому не получается писать. Примеров кучу просмотрел((
...
Рейтинг: 0 / 0
15.11.2019, 12:15
    #39889487
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
nnmserg11,

~
Код: plsql
1.
2.
3.
4.
select regexp_substr(s,'\w+', 1, level, 'm') words
  from (select 'Так можно можно можно,можно можно... вытрясти из строки отдельные слова'
                    s from dual)
  connect by regexp_substr(s, '\w+', 1, level, 'm') is not null


доводка рашпилем предполагается
...
Рейтинг: 0 / 0
15.11.2019, 12:30
    #39889497
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
nnmserg11,

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

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные (если возможно), лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
...
select 1245,'name10245',to_date('11.02.3167','DD.MM.YYYY') from dual 
)
select col2 from tbl
...


2) Покажите что сделали
3) Покажите что получили (Лучше в текстовом виде, а не screenshot)
4) используйте Тэги, читать код без них неудобно
5) "Портянки текста", лучше убрать под spoiler или приложить файлом

Для начала, воспользуйтесь документацией
Database SQL Language Reference REGEXP_SUBSTR
...
* position is a positive integer indicating the character of source_char where Oracle should begin the search. The default is 1, meaning that Oracle begins the search at the first character of source_char.

* occurrence is a positive integer indicating which occurrence of pattern in source_char Oracle should search for. The default is 1, meaning that Oracle searches for the first occurrence of pattern.

If occurrence is greater than 1, then the database searches for the second occurrence beginning with the first character following the first occurrence of pattern, and so forth. This behavior is different from the SUBSTR function, which begins its search for the second occurrence at the second character of the first occurrence.
...

Пример хороших тестовых данных
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with t(description) as (
select ' par1 par2 par3 par4' from dual union all
select 'par1   par2 par3 par4' from dual union all
select 'par1 par2 par3 par4' from dual union all
select 'par1 par2 par3 par4 ' from dual
)
select
REGEXP_SUBSTR (description,'(\S+)',1,1) as p1
,REGEXP_SUBSTR (description,'(\S+)',1,2) as p3
,REGEXP_SUBSTR (description,'(\S+)',1,3) as p3
from t
/
SQL> colu p1 for a10
SQL> colu p2 for a10
SQL> colu p3 for a10
SQL> /

P1         P3         P3
---------- ---------- ----------
par1       par2       par3
par1       par2       par3
par1       par2       par3
par1       par2       par3
...
Рейтинг: 0 / 0
15.11.2019, 12:33
    #39889502
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
nnmserg11
посоветуйте, что почитать про регулярки?
RTFM Using Regular Expressions in Database Applications (FAQ)
...
Рейтинг: 0 / 0
15.11.2019, 13:08
    #39889545
nnmserg11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Парни, большое спасибо!
Как в школе, после тыкания носом в один и тот же пример, кажется что-то дошло, что я не понимал))
...
Рейтинг: 0 / 0
15.11.2019, 13:42
    #39889580
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
:)
nnmserg11
Как в школе ... кажется что-то дошло, ...
".., но что именно, понять я не могу и по сей день.."
...
Рейтинг: 0 / 0
15.11.2019, 14:28
    #39889640
nnmserg11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
--Eugene--,
Та не, серьезно)

Я не верно понимаю описание значений (иногда и совсем не понимаю) - отсюда и затык.

Например:
* - Соответствует нолю или более вхождений. FacePalm

Поэтому, когда мне дают пример (\S+), читаю:
( ) Используется для групповых выражений в качестве подвыражений.
\S Соответствует не символу пробел. F***
+ Соответствует одному или более вхождений. CoolStoryBob

А теперь мне стало доходчивее. Буду читать ещё FAQ'и, практиковаться, может придет понимание более глубокое в какой-то момент))
...
Рейтинг: 0 / 0
15.11.2019, 17:06
    #39889848
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Ещё один вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t(description) as (
select ' par1 par2 par3 par4' from dual union all
select 'par1   par2 par3 par4' from dual union all
select 'par1 par2 par3 par4' from dual union all
select 'par1 par2 par3 par4 ' from dual
)

select 
    regexp_substr(description, '[^ ]+', 1, 1) p1,
    regexp_substr(description, '[^ ]+', 1, 2) p2,
    regexp_substr(description, '[^ ]+', 1, 3) p3,
    regexp_substr(description, '[^ ]+', 1, 4) p4
from t



P1 P2 P3 P4par1 par2 par3 par4par1 par2 par3 par4par1 par2 par3 par4par1 par2 par3 par4
...
Рейтинг: 0 / 0
15.11.2019, 17:36
    #39889870
nnmserg11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Synoptic,
Тоже норм, спс) Я уже всё сделал)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярные выражения / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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