CREATE TABLE t1(
x INTEGER PRIMARY KEY,
a, /* сортирующая последовательность BINARY */
b COLLATE BINARY, /* сортирующая последовательность BINARY */
c COLLATE RTRIM, /* сортирующая последовательность RTRIM */
d COLLATE NOCASE /* сортирующая последовательность NOCASE */
);
/* x a b c d */
INSERT INTO t1 VALUES(1,'abc','abc', 'abc ','abc');
INSERT INTO t1 VALUES(2,'abc','abc', 'abc', 'ABC');
INSERT INTO t1 VALUES(3,'abc','abc', 'abc ', 'Abc');
INSERT INTO t1 VALUES(4,'abc','abc ','ABC', 'abc');
/* Сравнение строк a=b выполняется с использованием
** сортирующей последовательностью BINARY. */
SELECT x FROM t1 WHERE a = b ORDER BY x;
--результат 1 2 3
/* Сравнение строк a=b выполняется с использованием
** сортирующей последовательностью RTRIM. */
SELECT x FROM t1 WHERE a = b COLLATE RTRIM ORDER BY x;
--результат 1 2 3 4
/* Сравнение строк a=b выполняется с использованием
** сортирующей последовательностью NOCASE. */
SELECT x FROM t1 WHERE d = a ORDER BY x;
--результат 1 2 3 4
/* Сравнение строк a=b выполняется с использованием
** сортирующей последовательностью BINARY. */
SELECT x FROM t1 WHERE a = d ORDER BY x;
--результат 1 4
/* Сравнение строк 'abc'=c выполняется с использованием
** сортирующей последовательностью RTRIM. */
SELECT x FROM t1 WHERE 'abc' = c ORDER BY x;
--результат 1 2 3
/* Сравнение строк c='abc' выполняется с использованием
** сортирующей последовательностью RTRIM. */
SELECT x FROM t1 WHERE c = 'abc' ORDER BY x;
--результат 1 2 3
/* Группировка выполняется с использованием
** сортирующей последовательности NOCASE.
** Значения 'abc', 'ABC' и 'Abc' попадают в одну и ту же группу. */
SELECT count(*) FROM t1 GROUP BY d ORDER BY 1;
--результат 4
/* Группировка выполняется с использованием
** сортирующей последовательности BINARY.
** Значения 'abc', 'ABC' и 'Abc' попадают в разные группы */
SELECT count(*) FROM t1 GROUP BY (d || '') ORDER BY 1;
--результат 1 1 2
/* Сортировка по столбцу c выполняется с использованием
** сортирующей последовательности RTRIM. */
SELECT x FROM t1 ORDER BY c, x;
--результат 4 1 2 3
/* Сортировка по (c||'') выполняется с использованием
** сортирующей последовательности BINARY. */
SELECT x FROM t1 ORDER BY (c||''), x;
--результат 4 2 3 1
/* Сортировка по столбцу c выполняется с использованием
** сортирующей последовательности NOCASE. */
SELECT x FROM t1 ORDER BY c COLLATE NOCASE, x;
--результат 2 4 3 1
Привет! Спасибо за публикацию, сколько пользуюсь SQLite3, но не знал про функции сравнения и правила сортировки строк в SQLite3. Возможно, не знал потому что не требовалось управлять механизмом сравнения при работе с таблицами. Но в любом случае очень интересный и полезный пост.
Привет!
Спасибо за отзыв! Следи за публикациями, подписывайся на RSS, планирую много разных подробностей по SQLite3.