|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Добрый день. Есть таблица примерно следующего вида 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 17:11 |
|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Подробненько по каждой позиции рассказываем, почему она сочтена нужной или ненужной... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 19:41 |
|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Например, возьмем запись 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 Думаю, идея понятна. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 20:04 |
|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Опечатался во втором предложении второго абзаца. В колонке presentation есть цифры 1 и 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 20:06 |
|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Ааа... вон оно что. Ну тогда осталось узнать версию MySQL. Очень надеюсь, что она 8+... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 20:12 |
|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Ver 15.1 Distrib 10.2.21-MariaDB Вроде бы, подходит ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 20:15 |
|
Взять подстроку по одному разделителю, но с разных позиций
|
|||
---|---|---|---|
#18+
Ну тогда делаем в CTE: CTE1, рекурсивный. Ищем максимальное количество разделителей на поле N, и генерим таблицу чисел от 1 до N+1. CTE2. Выделяем из полей i-е value и presentation, сохраняя к ним id и позицию. CTE3. Собираем всё обратно, заменяя отсутствующие позиции пустой строкой. CTE4, рекурсивный. Убираем задвоенные разделители. Основной запрос. Тримаем разделители с обоих концов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 20:37 |
|
|
start [/forum/topic.php?fid=47&msg=39835209&tid=1829056]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 316ms |
total: | 474ms |
0 / 0 |