powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Взять подстроку по одному разделителю, но с разных позиций
8 сообщений из 8, страница 1 из 1
Взять подстроку по одному разделителю, но с разных позиций
    #39835103
Czaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть таблица примерно следующего вида

id | value |presentaion

1 | aaa|bbb|ccc | 2|3
2 | aaa|bbb|ccc | 1|2|3
3 | aaa|bbb|ccc | 1
4 | aaa|bbb|ccc | 1|3

Строка value все время постоянна, а presentaion может меняться

Можно ли каким-то образом (без использования конструкции case when) на основе данных в колонке presentaion удалить ненужные подстроки в колонке value?

Т.е. должно политься следующее:

id | value |presentaion

1 | bbb|ccc | 2|3
2 | aaa|bbb|ccc | 1|2|3
3 | aaa | 1
4 | aaa|ccc | 1|3
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835197
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подробненько по каждой позиции рассказываем, почему она сочтена нужной или ненужной...
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835207
Czaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, возьмем запись aaa|bbb|ccc | 1|3

В колонке value строка разделена символом "|", т.е. он как бы делит строку на три части. В колонке presentation есть цифры 2 и 3. Сам вид разделителя в обоих колонках роли не играет, может быть и запятая, и точка с запятой и т.д. Таким образом, я хочу на основе цифр в колонке presentation взять, условно говоря, 1 и 3 часть строки, чтобы получилось aaa|ccc.

Соответственно, если в колонке value будет aaa|bbb|ccc|ddd, а в presentation будет 1|3|4, на выходе поучилось aaa|ccc|ddd

Думаю, идея понятна.
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835209
Czaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опечатался во втором предложении второго абзаца.
В колонке presentation есть цифры 1 и 3.
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835211
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа... вон оно что.
Ну тогда осталось узнать версию MySQL. Очень надеюсь, что она 8+...
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835213
Czaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ver 15.1 Distrib 10.2.21-MariaDB

Вроде бы, подходит
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835216
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда делаем в CTE:

CTE1, рекурсивный. Ищем максимальное количество разделителей на поле N, и генерим таблицу чисел от 1 до N+1.
CTE2. Выделяем из полей i-е value и presentation, сохраняя к ним id и позицию.
CTE3. Собираем всё обратно, заменяя отсутствующие позиции пустой строкой.
CTE4, рекурсивный. Убираем задвоенные разделители.
Основной запрос. Тримаем разделители с обоих концов.
...
Рейтинг: 0 / 0
Взять подстроку по одному разделителю, но с разных позиций
    #39835217
Czaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, большое спасибо за совет, завтра попробую.
Но, чувствую, за помощью я еще обращусь.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Взять подстроку по одному разделителю, но с разных позиций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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