#sql #string #sqlite #pattern-matching
#sql #строка #sqlite #сопоставление с образцом
Вопрос:
У меня есть база данных SQLite, состоящая из ряда буквенно-цифровых кодов и описаний. Оба поля являются ТЕКСТОВЫМИ. Формат кодирования представляет собой один алфавитный символ, за которым следует 2-значное числовое значение — это родительская категория. Многие родительские категории имеют подпункты — где код расширяется на десятичную дробь, а затем на буквенно-цифровое значение … так:
A01 является родительской категорией
A01.10 является подпунктом
Я хотел бы SELECT
использовать коды, в которых нет подпунктов… В этой таблице 80000 записей, поэтому просмотр ее вручную не идеален 😉
Итак, критерием включения является то, где code [an][n][n] существует И [an][n][n] .% не существует… Любые идеи / рекомендации приветствуются 🙂
Это TABLE
называется «Термины», а поле кода мысленно называется Code
TIA
Ответ №1:
Обработка строк не совсем сильная сторона SQLite, но я думаю, что вы делаете это немного окольным путем:
select *
from terms
where code not like '%.%'
and code not in (
select rtrim(rtrim(code, '1234567890'), '.')
from terms
where code like '%.%'
);
Идея состоит в том, чтобы сначала выяснить, в каких кодах есть подпункты, а затем исключить их.
Учитывая эти данные:
id | code
1 | a01
2 | a02
3 | a03
4 | a03.1
5 | a03.2
6 | a01.1
Затем этот запрос дает вам следующее:
id | code
2 | a02