Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
 Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
Всем привет!
Подскажите, пожалуйста, как изменить регистр в строке и удалить первое, и два последних тире?
Например:
из A317-7EA1-FK3E-4EF4-B595-CR30-B79Q-A744
получить a3177ea1-fc3e-4af8-b595-ce30b79ea644
6 мар 19, 11:34    [21826039]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
Vayuliya
как изменить регистр
LOWER()

Vayuliya
удалить первое, и два последних тире
REGEXP_REPLACE()
6 мар 19, 13:25    [21826204]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15404
Vayuliya
удалить первое, и два последних тире?
Можно ещё SUBSTRING, если регулярные выражения для вас сложны.
6 мар 19, 14:27    [21826331]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
Akina, получилось удалить первое тире следующим запросом:
select regexp_replace ('2A54-A9C1-9875-4F49-BC71-125C-CF58-6DF7', '.','',5,1) from dual
а как теперь добавить условия по последним двум?
11 мар 19, 16:52    [21829459]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
На просторах интернета нашла описание функций и получилось следующее:

with res as (select '2A54-A9C1-9875-4F49-BC71-125C-CF58-6DF7' c from dual)
select regexp_replace (c, '.', '', 5, 1) as cer from res

Как впихнуть LOWER и убрать остальные тире? Помогите, пожаааалуйста
14 мар 19, 13:41    [21832499]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15404
Vayuliya,

Написал то же самое, что выше до этого, только лишнего текста добавил.
А функции могут быть вложенными, в программировании почти везде так.
14 мар 19, 15:21    [21832710]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
Убиццо...

Регэксп должен быть таким:

начало([не тире]+)-([любой символ])-([не тире]+)-([не тире]+)конец

Замена соответственно

(группа 1)(группа 2)(группа 3)(группа 4)

Переведите это на корректный синтаксис регэкспа.

Аргумент - LOWER(литерал или имя поля).
15 мар 19, 07:49    [21833228]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
WildSery, Akina,
Ребят, я же не пишу сюда для того, чтобы вы глумились надо мной :)
Я понимаю, что вы профессионалы и знаете толк в sql.
Я обратилась за помощью, если вам сложно нормально объяснить, то просто закройте вопрос и продолжайте заниматься своим любимым делом.
Спасибо!

Сейчас попытаюсь расшифровать ваши умные глумления и написать запрос.
Всем любви и мира :*
18 мар 19, 10:53    [21835674]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15404
Vayuliya,

Не ищите какого-то скрытого смысла.
Если бы кто-то хотел безвозмездно решить за вас вашу задачу - уже бы написал.
Ответившие захотели вас направить на путь обучения, чтобы вы сами смогли решить, поэтому написали то, что написали.
18 мар 19, 11:19    [21835701]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
Vayuliya
Ребят, я же не пишу сюда для того, чтобы вы глумились надо мной
Ну да, хотелось сесть на шею и ножки свесить, а тут учиться заставляют... Хотите, чтобы мы тут вместо Вас всё сделали и подали готовеньким на том самом блюдечке? маловероятно. Есть опыт - даже однократная помощь в формате выдачи готового решения напрочь отшибает желание учиться - получать готовые ответы ведь гораздо проще...

Читайте, осваивайте, пробуйте. Задача - как раз прекрасно подходит для учебных целей, не очень сложная. Не получается - показывайте свои попытки, свой код, объясняйте, почему сделали так - укажем, в чём непонимание. Как, по-Вашему, появляются специалисты, которые знают толк в чём-то? только так...

Или Вы НЕ хотите становиться специалистом? тогда Вы просто ошиблись местом. Вам во фриланс, заказчиком. Тоже вариант...
18 мар 19, 11:28    [21835714]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
Akina,
Я только лишь намекнула на ваше "Убицццооооо"

Учиться готова!
Предполагаю, что вы предложили мне другой вариант, но пока что получилось добиться желаемого с помощью такого запроса:

SELECT lower (REGEXP_REPLACE('2A54-A9C1-9875-4F49-BC71-125C-CF58-6DF7',
'(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)',
'\1\2-\3-\4-\5-\6\7\8')) as certificate
FROM dual;

Думаю, что по вашему предложению будет меньше текста, но пока не получается...
19 мар 19, 17:33    [21837610]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
Vayuliya
пока что получилось добиться желаемого с помощью такого запроса:

Отлично!
Вот только зачем Вы тестируете лишнее? Задача как звучит?
Vayuliya
удалить первое, и два последних тире

Именно эти тире и надо находить и удалять, а остальные не трогать. Но тогда и нет смысла дробить их (остальные символы) на дополнительные группы и выискивать среди них дополнительные тире. Отделяемые группы соответственно будут "любой символ, кроме тире", а остальные символы, что в серединке, пойдут под шаблон "любой символ". Как было уже сказано в 21833228.

Т.е. шаблон будет ([^-]*)-(.*)-([^-]*)-([^-]*), а замена \1\2\3\4.
19 мар 19, 19:39    [21837731]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
Vayuliya
Я только лишь намекнула на ваше "Убицццооооо"
Вы написали текст запроса. Могли бы его протестировать (дело-то на 5 секунд!), убедиться в его несостоятельности, и не писать его тут... Но Вы этого не сделали. Выглядит как "сделала фигню, но всё равно горжусь" - ну и реакция соответствующая.
19 мар 19, 19:41    [21837734]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
На всякий случай (не помню, как точно работают регэкспы в оракле) - укажите дополнительно в шаблоне начало и конец литерала, и возможные пробелы, если документация считает, что это нужнонужно:

^[ ]*([^-]*)-(.*)-([^-]*)-([^-]*)[ ]*$
19 мар 19, 19:53    [21837740]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
Akina,

Да, поняла. Спасибо большое!

Еще интересную штуку нашла. Можно данные во всплывающем окошке вводить, мелочь, а приятно :)

select lower(regexp_replace('&number',
'^[ ]*([^-]*)-(.*)-([^-]*)-([^-]*)[ ]*$',
'\1\2\3\4')) as certificate
from dual;
20 мар 19, 10:14    [21838104]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Vayuliya
Member

Откуда:
Сообщений: 7
Akina,

Блин, только если пачку данных вставлять, то regexp не срабатывает, только регистр меняет.
Не поможете?
20 мар 19, 10:38    [21838137]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 51334
есть же форум по Ораклу
там хорошие спецы
20 мар 19, 11:29    [21838220]     Ответить | Цитировать Сообщить модератору
 Re: Изменение текста в PL SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18846
Vayuliya
если пачку данных вставлять, то regexp не срабатывает
Какую такую пачку? функция в запросе всегда имеет дело с одним значением, значением одного поля одной записи, никаких "пачек" там не может быть.
20 мар 19, 11:38    [21838232]     Ответить | Цитировать Сообщить модератору
Все форумы / Вопрос-Ответ Ответить