Начнем сначала со второго вопроса. Если вы хотите поддерживать запросы без учета регистра, вам следует сохранить вторую копию текстовых данных, которые вы хотите найти в верхнем регистре, в другом столбце. Затем, выполняя запросы по этому столбцу, вы сможете выполнять запросы без учета регистра.
Возвращаясь к поиску bo*
. Лучший способ сделать это — использовать схему, которая позволяет использовать столбцы кластеризации (столбцы 2 и выше первичного ключа) для поиска по диапазонам. Вот пример:
CREATE TABLE t1 (region INT, name TEXT, PRIMARY KEY (region, name));
В частности, если вы сделаете name
вторым столбцом ключа, вы сможете выполнять такие поиски, как
SELECT * FROM t1 WHERE name >= 'bo' and name < 'bp' ALLOW FILTERING;
который вернет результаты, которые вы ищете. Это работает только для завершающих подстановочных знаков: начальные символы должны быть постоянными, чтобы запросы диапазона работали. Опять же, если вы хотите выполнять поиск без учета регистра, сделайте столбец без учета регистра второй частью первичного ключа и выполните запрос по нему:
SELECT * FROM t1 WHERE name_upper >= 'BO' and name_upper < 'BP' ALLOW FILTERING;
person
Daniel S.
schedule
21.03.2014