кодесурса
«SQLite

Последовательности сортировки SQLite

script1adsense2code
script1adsense3code

Описание

Во время сравнения двух строк в SQLite он использует последовательность сортировки или функцию сортировки, чтобы понять, какая строка больше или равны ли эти две строки. SQLite имеет три встроенные функции сортировки: BINARY, NOCASE и RTRIM.

  • BINARY - сравнивает строковые данные с помощью memcmp () независимо от кодировки текста.
  • NOCASE - это почти то же самое, что и двоичный код, за исключением того, что 26 символов ASCII в верхнем регистре складываются в эквиваленты в нижнем регистре, прежде чем будет выполнено сравнение
  • RTRIM - То же, что и двоичный, за исключением того, что символы в конце пробела игнорируются.

Правила определения, какую функцию сортировки использовать для бинарного оператора сравнения (=, <,>, <=,> =,! =, IS и IS NOT), приведены ниже и в указанном порядке:

  1. Если какой-либо из операндов имеет явное назначение функции сортировки с использованием постфиксного оператора COLLATE, то для сравнения используется явная функция сортировки, имеющая приоритет перед функцией сортировки левого операнда.
  2. Если какой-либо из операндов является столбцом, то функция сортировки этого столбца используется с приоритетом над левым операндом.
  3. В противном случае для сравнения используется функция сортировки 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code