Последовательности сортировки SQLite
Описание
Во время сравнения двух строк в SQLite он использует последовательность сортировки или функцию сортировки, чтобы понять, какая строка больше или равны ли эти две строки. SQLite имеет три встроенные функции сортировки: BINARY, NOCASE и RTRIM.
- BINARY - сравнивает строковые данные с помощью memcmp () независимо от кодировки текста.
- NOCASE - это почти то же самое, что и двоичный код, за исключением того, что 26 символов ASCII в верхнем регистре складываются в эквиваленты в нижнем регистре, прежде чем будет выполнено сравнение
- RTRIM - То же, что и двоичный, за исключением того, что символы в конце пробела игнорируются.
Правила определения, какую функцию сортировки использовать для бинарного оператора сравнения (=, <,>, <=,> =,! =, IS и IS NOT), приведены ниже и в указанном порядке:
- Если какой-либо из операндов имеет явное назначение функции сортировки с использованием постфиксного оператора COLLATE, то для сравнения используется явная функция сортировки, имеющая приоритет перед функцией сортировки левого операнда.
- Если какой-либо из операндов является столбцом, то функция сортировки этого столбца используется с приоритетом над левым операндом.
- В противном случае для сравнения используется функция сортировки BINARY.
Примеры последовательности сортировки
Здесь был создан тест таблицы с четырьмя строками.
CREATE TABLE test(
coln INTEGER PRIMARY KEY,
cola, /* collating sequence BINARY */
colb COLLATE BINARY, /* collating sequence BINARY */
colc COLLATE RTRIM, /* collating sequence RTRIM */
cold COLLATE NOCASE /* collating sequence NOCASE */
);
Теперь вставьте несколько строк.
INSERT INTO test VALUES(1,'pqr','pqr', 'pqr ','pqr');
INSERT INTO test VALUES(2,'pqr','pqr', 'pqr', 'PQR');
INSERT INTO test VALUES(3,'pqr','pqr', 'pqr ', 'Pqr');
INSERT INTO test VALUES(4,'pqr','pqr ','PQR', 'pqr');
sqlite> select * from test; Колн Кола Колб Колк Холод ---------- ---------- ---------- ---------- ------- 1 pqr pqr pqr pqr 2 pqr pqr pqr PQR 3 pqr pqr pqr Pqr 4 PQR PQR PQR PQR
Приведенная выше таблица показывает, что 3-й столбец 1-й строки содержит два пробела в конце, четвертый столбец 2-й строки - все символы заглавные, 3-й столбец 3-й строки содержит один пробел в конце, а 4-й столбец 3-й строки - первый капитал символов, 3-й столбец 4-й строки содержит весь капитал символов.
Сравнение текста cola = colb выполняется с использованием последовательности сортировки BINARY.
SELECT coln FROM test WHERE cola = colb ORDER BY coln;
Вот результат.
Coln ---------- 1 2 3
Здесь, в приведенном выше результате, cola и colb совпадают для первых трех строк, поскольку столбец colb для четвертой строки имеет пробел в конце, а последовательность сортировки столбца colb - BINARY, поэтому она будет совпадать.
Сравнение текста cola = colb выполняется с использованием последовательности упорядочения RTRIM.
SELECT coln FROM test WHERE cola = colb COLLATE rtrim ORDER BY coln;
Вот результат.
Coln ---------- 1 2 3 4
Здесь в приведенном выше результате cola и colb совпадают для всех строк, потому что последовательность упорядочения rtrim определена в операторе select.
Сравнение текста cold = cola выполняется с использованием последовательности сортировки NOCASE.
SELECT coln FROM test WHERE cold = cola ORDER BY coln;
Вот результат.
Coln ---------- 1 2 3 4
Здесь в вышеприведенном результате показано, что столбец cold и cola совпадают для всех строк, потому что столбец cold нечувствителен к регистру.
Сравнение текста cola = cold выполняется с использованием последовательности сортировки BINARY.
SELECT coln FROM test WHERE cola = cold ORDER BY coln;
Вот результат.
Coln ---------- 1 4
Здесь в вышеприведенном результате показано, что столбец cola и cold совпадают только для 1-й и 4-й строк
Сравнение текста 'pqr' = colc выполняется с использованием последовательности упорядочения RTRIM.
SELECT coln FROM test WHERE 'pqr' = colc ORDER BY coln;
Вот результат.
Coln ---------- 1 2 3
Здесь в приведенном выше результате показано, что столбец colc совпадает только с выражением, как определено, поскольку этот столбец сортируется по rtrim
Сравнение текста colc = 'pqr' выполняется с использованием последовательности упорядочения RTRIM.
SELECT coln FROM test WHERE colc ='pqr' ORDER BY coln;
Вот результат.
Coln ---------- 1 2 3
Здесь в приведенном выше результате показано, что столбец colc совпадает только с выражением, как определено, поскольку этот столбец сортируется по rtrim.
Группировка выполняется с использованием последовательности сортировки NOCASE (значения «pqr», «PQR» и «Pqr» помещены в одну группу).
SELECT count(*) FROM test GROUP BY cold ORDER BY 1;
Вот результат.
кол-(*) ---------- 4
Группировка выполняется с использованием последовательности сортировки BINARY. «PQR» и «PQR» и «PQR» образуют разные группы
SELECT count(*) FROM test GROUP BY (cold || '') ORDER BY 1;
Вот результат.
кол-(*) ---------- 1 1 2
Сортировка или сортировка по столбцу выполняется с использованием последовательности сортировки RTRIM.
SELECT coln FROM test ORDER BY colc, coln;
Вот результат.
Coln ---------- 4 1 2 3
Сортировка (colc || '') выполняется с использованием последовательности сортировки BINARY.
SELECT coln FROM test ORDER BY (colc||''), coln;
Вот результат.
Coln ---------- 4 2 3 1
Сортировка столбца colc выполняется с использованием последовательности сортировки NOCASE.
SELECT coln FROM test ORDER BY colc COLLATE NOCASE, coln;
Вот результат.
Coln ---------- 2 4 3 1
Предыдущая: Союз
Далее: Агрегатная функция SQLite AVG ()
Новый контент: Composer: менеджер зависимостей для PHP , R программирования