Как изменить сопоставление sqlite3 базы данных к виду нечувствительно к регистру?

Добавьте поддержку сжатых файлов через волшебный ARGV:

s{ 
    ^            # make sure to get whole filename
    ( 
      [^'] +     # at least one non-quote
      \.         # extension dot
      (?:        # now either suffix
          gz
        | Z 
       )
    )
    \z           # through the end
}{gzcat '$1' |}xs for @ARGV;

(кавычки вокруг $ _ необходимый для обработки имен файлов с метасимволами оболочки в)

Теперь <> функция распакует любой @ARGV файлы, которые заканчиваются ".gz" или ".Z":

while (<>) {
    print;
}
18
задан Community 23 May 2017 в 12:02
поделиться

3 ответа

В документации SQLite Datatypes обсуждаются определяемые пользователем последовательности сопоставления. В частности, вы используете COLLATE NOCASE для достижения своей цели.

Они приводят пример:

CREATE TABLE t1(
    a,                 -- default collation type BINARY
    b COLLATE BINARY,  -- default collation type BINARY
    c COLLATE REVERSE, -- default collation type REVERSE
    d COLLATE NOCASE   -- default collation type NOCASE
);

и отмечают, что:

- Группировка выполняется с использованием последовательности сортировки NOCASE (т.е. значения - «abc» и «ABC» помещаются в одну группу). ВЫБРАТЬ Счетчик (*) ГРУППА ПО d ИЗ t1;

11
ответ дан 30 November 2019 в 07:28
поделиться
select * from tableNames Order by lower(Name);

Михаэль ван дер Вестхуизен в своем комментарии ниже объясняет, почему это не лучший способ. Я оставляю этот ответ, чтобы сохранить его комментарий и послужить предупреждением для других, у которых может быть такая же «блестящая» идея, которая была у меня; -)

2
ответ дан 30 November 2019 в 07:28
поделиться

Для сортировки без учета регистра вы можете использовать ORDER BY Name COLLATE NOCASE

22
ответ дан 30 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

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