(SQLite) Выбор # разделенных данных в виде нескольких строк

Либо document.getElementById('i1'), document.getElementById('i2'), либо document.getElementsByName("username")[0] не возвращают элемент. Проверьте, что все элементы существуют.

1
задан Lay 16 January 2019 в 22:21
поделиться

1 ответ

В SQLite вы можете использовать рекурсивное общее табличное выражение для решения этой проблемы. Рекурсивный CTE выбирает из исходной таблицы и разбивает строки на части, из которых выбирает основной запрос.

WITH RECURSIVE cte(id, val, etc) AS(
    SELECT id_a, '', str_ids FROM arche
    UNION ALL
    SELECT 
        id
        , SUBSTR(etc, 0, INSTR(etc, '#'))
        , SUBSTR(etc, INSTR(etc, '#')+1)
    FROM cte
    WHERE etc <> ''
)
SELECT id AS id_a, REPLACE(val, 'id', '') AS id_b
FROM cte
WHERE val <> ''
ORDER BY id, val

Вот пример:

Схема (SQLite v3.26)


Запрос № 1 [1113 ]

WITH RECURSIVE cte(id, val, etc) AS(
    SELECT 1, '', '#id1#id2#id4#id7#'
    UNION ALL
    SELECT 
        id
        , SUBSTR(etc, 0, INSTR(etc, '#'))
        , SUBSTR(etc, INSTR(etc, '#')+1)
    FROM cte
    WHERE etc <> ''
)
SELECT id AS id_a, val AS id_b
FROM cte
WHERE val <> ''
ORDER BY id, val;
| id_a | id_b |
| ---- | ---- |
| 1    | id1  |
| 1    | id2  |
| 1    | id4  |
| 1    | id7  |

Просмотр базы данных Fiddle

NB2:

  • REGEXP_REPLACE не существует в SQLite, я заменил его на REPLACE

  • , вам нужно # объявление конца строки, чтобы это работало (наличие двух # `тоже нормально)

    [ 118]
  • это не очень эффективный подход; если вам нужно обработать много строк, это может плохо масштабироваться.

  • [+1121]
0
ответ дан GMB 16 January 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: