Типи даних в SQLite версії 3 - xBB.uz

  1. Вибрані доки
  2. 1.0. Класи зберігання і типи даних
  3. 1.1. Логічні типи даних
  4. 1.2 Типи даних дати і часу
  5. 2.0. афіновані типи
  6. 2.1. Визначення аффинирования стовпчика
  7. 2.2 Приклади назв афіновані типів
  8. 2.3. Приклад поведінки аффинированного стовпчика
  9. 3.0. вирази порівняння
  10. 3.1. Порядок сортування
  11. 3.2. Аффинирования операцій порівняння
  12. 3.3. Перетворення типів перед порівнянням
  13. 3.4. приклад порівняння
  14. 6.1. Призначення сортують послідовностей в SQL
  15. 6.2. Приклади сортують послідовностей
  16. 13 коментарів
Вибрані доки

Підписатися через RSS2Email.ru

У більшості двигунів баз даних SQL (наскільки нам відомо, практично у всіх двигунах SQL, відмінних від SQLite) використовується сувора статична типізація. При статичної типізації, тип даних того чи іншого значення визначається його контейнером - конкретним стовпцем, в якому це значення зберігається.

SQLite використовує більш загальну систему типізації - динамічну, коли тип даних значення пов'язаний з самим значенням, а не з його контейнером. Динамічна система SQLite має зворотну сумісність зі статичними системами інших СУБД. В тому сенсі, що SQL-запити статично типізованих баз даних повинні працювати так само і з SQLite. Однак, динамічна типізація в SQLite дозволяє виконувати операції, неможливі в традиційних жорстко типізованих базах даних.

1.0. Класи зберігання і типи даних

Кожне значення, яке зберігається в базі даних SQLite (або обробляється движком), має один з наступних класів зберігання:

  • NULL. Пусте значення в таблиці бази.
  • INTEGER. Цілочисельне значення, яке зберігається в 1, 2, 3, 4, 6 або 8 байтах, в залежності від величини самого значення.
  • REAL. Числове значення з плаваючою точкою. Зберігається в форматі 8-байтного числа IEEE з плаваючою точкою.
  • TEXT. Значення рядка тексту. Зберігається з використанням кодування бази даних (UTF-8, UTF-16BE або UTF-16LE).
  • BLOB. Значення бінарних даних, що зберігаються точно в тому ж вигляді, в якому були введені.

Відзначимо, що клас зберігання - більш широке поняття, ніж тип даних. Наприклад, клас зберігання INTEGER включає 6 різних типів цілочисельних даних різної довжини. На диску це записується по-різному. Але як тільки цілочисельні значення зчитуються з диска і надходять для обробки в оперативну пам'ять, вони перетворюються в найбільш загальний тип даних (8-байтное ціле число). Отже, зберігання по системі класу даних в практичному плані не відрізняються від зберігання на кшталт даних, і вони можуть бути взаємозамінними.

Будь-стовпець бази даних SQLite версії 3, за винятком стовпців INTEGER PRIMARY KEY, може бути використаний для зберігання значень будь-якого класу.

Всі значення в інструкціях SQL, чи є вони літералами або параметрами, вбудованими в рядок SQL-запиту в разі прекомпіліруемих інструкцій SQL, мають неявний клас зберігання. В умовах, описаних нижче, движок бази даних може конвертувати значення між числовими класами зберігання (INTEGER і REAL) і TEXT під час виконання запиту.

1.1. Логічні типи даних

SQLite не має окремого логічного класу зберігання. Замість цього, логічні значення зберігаються як цілі числа 0 (false) і 1 (true).

1.2 Типи даних дати і часу

SQLite не мають класів, призначених для зберігання дат і / або часу. Замість цього, вбудовані функції дати і часу в SQLite здатні працювати з датами і часом, збереженими в вигляді значень TEXT, REAL і INTEGER в наступних форматах:

  • TEXT як рядок формату ISO8601 ( "YYYY-MM-DD HH: MM: SS.SSS").
  • REAL як числа юліанського календаря. Тобто число днів з полудня 24 листопада 4714 до н.е. за Гринвічем відповідно до раннім григоріанським календарем.
  • INTEGER як час Unix, - кількість секунд з 1970-01-01 00:00:00 UTC.

У додатках слід вибирати, в якому з цих форматів зберігати дати і час, а потім можна вільно конвертувати з одного формату в інший за допомогою вбудованих функцій дати і часу.

2.0. афіновані типи

З метою забезпечення максимальної сумісності між SQLite і іншими СУБД, SQLite підтримує концепцію афіновані типів для стовпців таблиць. Аффинированного тип - це той, який є рекомендованим для зберігаються в стовпці значень. Важливою ідеєю тут є те, що тип рекомендується, але не є обов'язковим. У будь-якому стовпці можна як і раніше зберігати дані будь-якого типу. Просто в деяких шпальтах, при наявності вибору, одного класу зберігання буде надано перевагу перед іншим. Переважний клас для зберігання даних в стовпці називається афіновані.

Кожному стовпцю в базі даних SQLite версії 3 може бути присвоєно один з наступних афіновані типів:

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • NONE

Стовпці з афіновані типом TEXT призначені для зберігання даних класів NULL, TEXT або BLOB. Якщо в стовпець з афіновані TEXT вставляються числові дані, вони перед збереженням конвертуються в текстову форму.

Стовпець з афіновані NUMERIC може містити значення з використанням всіх п'яти класів зберігання. Коли в стовпець з спорідненістю NUMERIC вставляються текстові дані, текст конвертується в INTEGER або REAL (в порядку переваги), якщо таке перетворення можливо без втрат і має оборотний характер. Що стосується перетворення між TEXT і REAL, SQLite вважає, що конвертація є оборотним і без втрат, якщо можна відновити перші 15 значущих десяткових цифр числа. Якщо перетворення TEXT в INTEGER або REAL не представляється можливим без втрат, то значення зберігається за допомогою класу зберігання TEXT. Спроби конвертації в NULL або BLOB не розпочинаються.

Рядок може виглядати як літерал з плаваючою точкою або як позначення експоненти, але до тих пір, поки значення може бути виражене як ціле число, спорідненість NUMERIC буде перетворювати його в ціле. Таким чином, рядок '3.0e + 5' зберігається в стовпці, з афіновані NUMERIC, як ціле число 300000, а не як значення з плаваючою точкою 300000.0.

Стовпець, який аффинированного з INTEGER, поводиться так само, як стовпці, афіновані з NUMERIC. Різниця між аффинированного INTEGER і NUMERIC проявляється тільки в вираженні CAST.

Стовпець з афіновані REAL поводиться як стовпець з афіновані NUMERIC, за винятком того, що в стовпці REAL цілочисельні значення примусово перетворюються на значення з плаваючою точкою. (Заради внутрішньої оптимізації, малі значення з плаваючою точкою без дрібних компонентів, збережені в шпальтах, з афіновані REAL, записуються на диск у вигляді цілих чисел, щоб займати менше місця, і автоматично перетворяться назад в значення з плаваючою точкою при зчитуванні. Ця оптимізація повністю невидима на рівні SQL і може бути виявлена ​​тільки шляхом вивчення бітів файлу бази даних.)

Стовпець з афіновані NONE не любить будь-який певний клас зберігання і не робить жодних спроб примусового перетворення даних з одного класу в інший.

2.1. Визначення аффинирования стовпчика

Аффинирования стовпчика визначається оголошенням типу стовпця, за такими правилами в зазначеному порядку:

  1. Якщо оголошення типу містить рядок "INT", то стовпець асоціюється з афіновані INTEGER.
  2. Якщо оголошення типу стовпця містить будь-яку з рядків "CHAR", "CLOB", або "TEXT", то аффинирования визначається як TEXT. Зверніть увагу, що тип VARCHAR містить підрядок "CHAR", і тому йому теж зіставляється аффинированного TEXT.
  3. Якщо оголошення типу стовпця містить рядок "BLOB" або якщо тип не вказано, то стовпець аффініруется з NONE.
  4. Якщо оголошення типу стовпця містить будь-яку з рядків "REAL", "FLOA" або "DOUB", аффинирования визначається як REAL.
  5. В інших випадках одну зіставляється аффинированного NUMERIC.

Зверніть увагу, що послідовність правил для визначення спорідненості стовпчика має важливе значення. Стовпець з заявленим типом "CHARINT" буде відповідати як правилом 1, так і 2, але перше правило має перевагу, і тому спорідненість стовпчика визначиться як INTEGER.

2.2 Приклади назв афіновані типів

У наступній таблиці показано, як багато загальних назв типів даних з більш традиційних реалізацій SQL перетворюються в афіновані типи відповідно до п'ятьма правилами, викладеними в попередньому розділі. Ця таблиця показує тільки невелику підмножину типів даних, які буде приймати SQLite. Зверніть увагу, що числові аргументи в дужках після імені типу (наприклад: "VARCHAR (255)") ігноруються SQLite, так як він не накладає обмежень (крім загального великого обмеження SQLITE_MAX_LENGTH) на довжину рядків, бінарних або числових значень.

Приклади назв типів із запитів CREATE TABLE або виразу CAST Результуюча аффинирования Правило, використане для визначення аффинирования INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8 INTEGER 1 CHARACTER (20)
VARCHAR (255)
VARYING CHARACTER (255)
NCHAR (55)
NATIVE CHARACTER (70)
NVARCHAR (100)
TEXT
CLOB TEXT 2 BLOB
немає вказівки типу даних NONE 3 REAL
DOUBLE
DOUBLE PRECISION
FLOATNONE REAL 4 NUMERIC
DECIMAL (10,5)
BOOLEAN
DATE
DATETIME NUMERIC 5

Відзначимо, що оголошений тип з "плаваючою точкою" дасть аффинирования з INTEGER, а не з REAL, через "INT" в кінці "POINT". А заявлений тип "STRING" дасть аффинирования з NUMERIC, а не з TEXT.

2.3. Приклад поведінки аффинированного стовпчика

У наступному SQL-коді показано, як SQLite використовує аффинирования стовпців для перетворення типів при приміщенні даних у стовпці:

CREATE TABLE t1 (t TEXT, - аффинированного з TEXT за правилом 2 nu NUMERIC, - аффинированного з NUMERIC за правилом 5 i INTEGER, - аффинированного з INTEGER за правилом 1 r REAL, - аффинированного з REAL за правилом 4 no BLOB - неаффінірован за правилом 3); - Значення зберігаються як TEXT, INTEGER, INTEGER, REAL, TEXT. INSERT INTO t1 VALUES ( '500.0', '500.0', '500.0', '500.0', '500.0'); SELECT typeof (t), typeof (nu), typeof (i), typeof (r), typeof (no) FROM t1; text | integer | integer | real | text - Значення зберігаються як TEXT, INTEGER, INTEGER, REAL, REAL. DELETE FROM t1; INSERT INTO t1 VALUES (500.0, 500.0, 500.0, 500.0, 500.0); SELECT typeof (t), typeof (nu), typeof (i), typeof (r), typeof (no) FROM t1; text | integer | integer | real | real - Значення зберігаються як TEXT, INTEGER, INTEGER, REAL, INTEGER. DELETE FROM t1; INSERT INTO t1 VALUES (500, 500, 500, 500, 500); SELECT typeof (t), typeof (nu), typeof (i), typeof (r), typeof (no) FROM t1; text | integer | integer | real | integer - Бінарні дані зберігаються як BLOB незалежно від аффинирования стовпчика. DELETE FROM t1; INSERT INTO t1 VALUES (x'0500 ', x'0500', x'0500 ', x'0500', x'0500 '); SELECT typeof (t), typeof (nu), typeof (i), typeof (r), typeof (no) FROM t1; blob | blob | blob | blob | blob - Значення NULL також не змінюються аффинирования DELETE FROM t1; INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL, NULL); SELECT typeof (t), typeof (nu), typeof (i), typeof (r), typeof (no) FROM t1; null | null | null | null | null

3.0. вирази порівняння

SQLite версії 3 має звичайний набір операторів SQL для виразів порівняння, в тому числі "=", "==", "<", "<=", ">", "> =", "! =", "<> "," BETWEEN "," IN "," IS "," NOT IN "і" IS NOT ".

3.1. Порядок сортування

Результати порівняння залежать від класів зберігання операндів відповідно до наступних правил:

  • Значення з класом зберігання NULL вважається менше будь-якого іншого значення (в тому числі і іншого значення з класом зберігання NULL).
  • Значення INTEGER або REAL вважається менше, ніж значення TEXT або BLOB. Коли INTEGER або REAL порівнюється з іншим INTEGER або REAL, відбувається чисельне порівняння.
  • Значення TEXT менше значення BLOB. Коли порівнюються два значення TEXT, для визначення результату використовується відповідна послідовність сортування.
  • Коли порівнюються два значення BLOB, результат визначається з використанням функції memcmp ().

3.2. Аффинирования операцій порівняння

Перед виконанням порівняння SQLite може спробувати конвертувати значення між класами зберігання INTEGER, REAL, і / або TEXT. Робляться спроби конвертації чи ні, але порівняння відбувається в залежності від аффинирования операндів. Афіннірованность операндів визначається за такими правилами:

  • Вираз, який є простою посиланням на значення стовпця, має таку ж аффинирования, як і стовпці. Зауважимо, що якщо X і YZ - стовпці, то вираження + X і + YZ обчислюються відповідно до визначеної аффинирования.
  • Вираз виду "CAST (вираз AS тип)" має ту ж аффинирования, що і стовпець, оголошений з вказаним типом.
  • В інших випадках вираз не має взагалі ніякої аффинирования.

3.3. Перетворення типів перед порівнянням

"Застосувати аффинирования" означає конвертувати компоненти на певний клас зберігання тільки в тому випадку, якщо перетворення відбувається без втрат і є оборотним. Аффинирования використовується для операндів порівняння до самого процесу порівняння відповідно до наступних правил, що застосовуються у зазначеній послідовності:

  • Якщо один з операндів має аффинирования INTEGER, REAL або NUMERIC, а інший операнд - спорідненість TEXT або NONE, то до іншого операнду застосовується аффинирования NUMERIC.
  • Якщо один з операндів має аффинирования TEXT, а в іншого аффинирования немає, то до цього іншому застосовується аффинирования TEXT.
  • В іншому випадку ніяка аффинирования не застосовується і операнди порівнюються як є.

Вираз "a BETWEEN b AND c" розглядається як дві окремі бінарні операції: "a> = b AND a <= c", навіть якщо це означає, що в кожному з порівнянь до 'a' застосовуються різні аффинирования. Перетворення типів даних при порівнянні в формі "x IN (SELECT y ...)" обробляються так, як якщо б порівняння дійсно були "x = y". Вираз "a IN (x, y, z, ...)" еквівалентно "a = + x OR a = + y OR a = + z OR ...". Іншими словами, значення праворуч від оператора IN (в даному прикладі: "x", "y" і "z") вважаються не мають аффинирования, навіть якщо вони виявляються значеннями стовпчика або виразами CAST.

3.4. приклад порівняння

CREATE TABLE t1 (a TEXT, - аффинированного з TEXT b NUMERIC, - аффинированного з NUMERIC c BLOB, - неаффінірован d - неаффінірован); - Значення зберігаються як TEXT, INTEGER, TEXT і INTEGER відповідно INSERT INTO t1 VALUES ( '500', '500', '500', 500); SELECT typeof (a), typeof (b), typeof (c), typeof (d) FROM t1; text | integer | text | integer - Оскільки стовпець "a" аффинированного з TEXT, числові значення з правого боку - виразів будуть перед порівнянням перетворені в TEXT. SELECT a <40, a <60, a <600 FROM t1; 0 | 1 | 1 - До правих операндам повинна бути застосована аффинирования з TEXT, але - оскільки вони вже належать класу TEXT, це не має сенсу. - Ніяких перетворень не відбувається. SELECT a < '40', a < '60', a < '600' FROM t1; 0 | 1 | 1 - Оскільки стовпець "b" аффинированного з NUMERIC, до операндам з правого боку - також буде застосована аффинирования NUMERIC. Оскільки ці операнди вже - є числовими, застосування аффинирования непотрібно. - Ніяких перетворень не відбувається. Всі значення порівнюються як числа. SELECT b <40, b <60, b <600 FROM t1; 0 | 0 | 1 - До операндам справа буде застосована аффинирования NUMERIC, і вони будуть - перетворені з TEXT в INTEGER. Потім буде вироблено числове порівняння. SELECT b < '40', b < '60', b < '600' FROM t1; 0 | 0 | 1 - Ніяких афіновані перетворень не проводиться. Значення в правих - частинах належать класу зберігання INTEGER і тому менше значень TEXT - зліва. SELECT c <40, c <60, c <600 FROM t1; 0 | 0 | 0 - Ніяких афіновані перетворень не проводиться. - Значення порівнюються як значення TEXT. SELECT c < '40', c < '60', c < '600' FROM t1; 0 | 1 | 1 - Ніяких афіновані перетворень не проводиться. Значення з правого - сторони належать класу зберігання INTEGER і порівнюються зі значеннями - INTEGER зліва як числа. SELECT d <40, d <60, d <600 FROM t1; 0 | 0 | 1 - Ніяких афіновані перетворень не проводиться. - Значення INTEGER зліва завжди менше значень TEXT справа. SELECT d
У прикладі всі результати залишаться такими ж, якщо у всіх порівняннях замінити вираження в формі "a <40" на "40> a".

4.0. Оператори


Всі математичні оператори (+, -, *, /,%, <<, >>, & і |) перетворять операнди в NUMERIC до виконання операцій. Перетворення відбувається навіть в тому випадку, якщо воно незворотне і з втратами. Операнд NULL призводить до порожнього (NULL) результату будь-яку математичну операцію. Операнд в математичної операції, яка не наводиться будь-яким чином до числовому і не є NULL, перетворюється в 0 або 0.0.

5.0. Сортування, групування і складові SELECT-и


Коли результати запиту упорядковано за допомогою ORDER BY, першими йдуть значення класу NULL, потім INTEGER і REAL, попереджаючи в числовому порядку, потім TEXT, впорядковані відповідно сортувальної послідовності, і, нарешті, BLOB в порядку, визначеному функцією memcmp (). Перед упорядкуванням конвертування класів зберігання не проводиться.
При угрупованню за допомогою GROUP BY, значення з різними класами зберігання вважаються різними, крім значень INTEGER і REAL, які вважаються еквівалентними по їх числовим значенням. Угруповання не приводить до конвертації класів зберігання.
Складові оператори для запитів SELECT, тобто UNION, INTERSECT і EXCEPT, виробляє неявне порівняння між значеннями. По відношенню до операндам порівняння не застосовується аффинирования, а якщо відбувається неявне порівняння, пов'язане з UNION, INTERSECT і EXCEPT, значення порівнюються «як є».

6.0. сортувальні послідовності


Коли SQLite порівнює два рядки, використовується сортує послідовність або сортуються функція (два терміни для позначення одного і того ж), щоб визначити, яка з рядків більше або не є рядки рівними. SQLite має три вбудованих сортувальні функції: BINARY, NOCASE і RTRIM.
  • BINARY - зіставляє рядки даних з використанням memcmp (), незалежно від кодування тексту.
  • NOCASE - діє так само, як BINARY, за винятком 26-ти великих літер ASCII, які перед сортуванням переводяться в свої еквіваленти в нижньому регістрі. Зверніть увагу, що переведення в нижній регістр піддаються тільки символи в кодуванні ASCII. У зв'язку з розміром необхідних для цього таблиць, SQLite не намагається зробити повний переклад в нижній регістр всіх літерних символів UTF.
  • RTRIM - діє так само, як BINARY, але ігноруються прогалини в кінці рядка.

У додатку можна зареєструвати додатковий набір функцій за допомогою інтерфейсу sqlite3_create_collation ().

6.1. Призначення сортують послідовностей в SQL

Кожен стовпець кожної таблиці має пов'язану з ним функцію сортування. Якщо функція не визначена явно, то за замовчуванням використовується BINARY. У разі задіяння конструкції COLLATE у визначенні стовпця призначається альтернативна сортує функція.

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

  1. Якщо одному з операндів, розташованому праворуч, явно призначена сортує функція з використанням COLLATE, то для порівняння використовується ця явна функція, але з попереднім виконанням сортуючої функції зіставленої лівому операнду.
  2. Якщо одним з операндів є стовпець, то його сортує функція є пріоритетною і передує виконання сортуючої функції наступного операнда. З метою вказівки пріоритетності виконання, ім'я стовпця, яке може починається з одного або декількох унарних операторів "+". Така конструкція буде як і раніше вважається ім'ям.
  3. В інших випадках для порівняння використовується сортує функція BINARY.

Операнд порівняння вважається володарем явно призначеної сортуючої функції (правило 1 вище), якщо після якогось подвираженія з цим операндом використовується оператор COLLATE. Таким чином, якщо оператор COLLATE використовується в будь-якому місці вираження порівняння, сортує функція визначається цим оператором, і використовується для порівняння рядків незалежно від того, чи можуть стовпці таблиці бути частиною цього виразу. Якщо два або більше подвираженія з оператором COLLATE знаходяться в якихось місцях порівняння, використовується найлівіша явна функція, незалежно від того, наскільки глибоко оператори COLLATE вкладені в вираз, і незалежно від того, яким чином вираз укладено в дужки.

Вираз "x BETWEEN y and z" логічно еквівалентно двом порівнянь "x> = y AND x <= z" і працює по відношенню сортуючої функції так, як ніби це два окремих порівняння. Вираз "x IN (SELECT y ...)" обробляється так само, як вираз "x = y", за допомогою певної сортуючої послідовності. Сортуючої послідовністю, використовуваної для вираження виду "x IN (y, z, ...)", є сортує послідовність для x.

У конструкції ORDER BY, що є частиною SELECT, може використовуватися сортує послідовність з використанням оператора COLLATE. В цьому випадку для сортування використовується задана функція зіставлення. В іншому випадку, якщо вибірка сортується за допомогою ORDER BY за значеннями стовпчика, то для визначення порядку сортування використовується сортує послідовність саме цього стовпчика. Якщо вираз не містить стовпець як параметр і не використовує COLLATE, то використовується сортує послідовність BINARY.

6.2. Приклади сортують послідовностей

Наведені нижче приклади демонструють сортувальні послідовності, які можуть використовуватися для визначення результатів зіставлення текстів, що виконуються за допомогою різних запитів SQL. Зауважимо, що в разі чисельних значень, а також BLOB і NULL, порівняння тексту може не бути затребуваним.

CREATE TABLE t1 (x INTEGER PRIMARY KEY, a, / * сортує послідовність BINARY * / b COLLATE BINARY, / * сортує послідовність BINARY * / c COLLATE RTRIM, / * сортує послідовність RTRIM * / d COLLATE NOCASE / * сортує послідовність NOCASE * / ); / * Xabcd * / 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

Переклад з англійської: vanilinkin, спеціально для xBB.uz, 16.02.2011
Оригінальний текст доступний за адресою http://www.sqlite.org/datatype3.html

Попередні публікації:

Останнє редагування: 2011-09-05 15:53:28

Мітки матеріалу: sqlite , типи даних , it , програмування , sql , розробка по , db , інформаційні технології , по , безкоштовне по , бази даних , софт , software , soft , програмне забезпечення , ит , спо , програмне забезпечення по

13 коментарів

Останні десять коментарів:

Залиште, будь ласка, свій коментар до публікації

Дополнительная информация

rss
Карта