SQLite: выберите буквенно-цифровые записи без десятичного знака в последовательной строке

#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