婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 詳解SQLite中的數(shù)據(jù)類型

詳解SQLite中的數(shù)據(jù)類型

熱門標(biāo)簽:怎么申請(qǐng)400熱線電話 簡(jiǎn)單的智能語(yǔ)音電銷機(jī)器人 泗洪正規(guī)電話機(jī)器人找哪家 ai電話電話機(jī)器人 湖南保險(xiǎn)智能外呼系統(tǒng)產(chǎn)品介紹 小程序智能電話機(jī)器人 河北便宜電銷機(jī)器人軟件 怎么去開(kāi)發(fā)一個(gè)電銷機(jī)器人 南昌呼叫中心外呼系統(tǒng)哪家好

 大多數(shù) SQL 數(shù)據(jù)庫(kù)引擎 (據(jù)我們所知,除 SQLite 之外的所有 SQL 數(shù)據(jù)庫(kù)引擎)都使用嚴(yán)格的靜態(tài)類型。使用靜態(tài)類型,值的類型便由它的容器 -- 存儲(chǔ)值的特定的列 -- 來(lái)決定。

SQLite 使用更通用的動(dòng)態(tài)類型系統(tǒng)。在 SQLit 中,值的數(shù)據(jù)類型與值本身相關(guān),而不是與它的容器。SQLite 的動(dòng)態(tài)類型系統(tǒng)與其它數(shù)據(jù)庫(kù)引擎的常用靜態(tài)類型系統(tǒng)是向后兼容的,在這個(gè)意義上,工作在靜態(tài)類型數(shù)據(jù)庫(kù)上的 SQL 語(yǔ)句應(yīng)該以同樣的方式工作在 SQLite 中。然而,SQLite 中的動(dòng)態(tài)類型允許它做傳統(tǒng)的嚴(yán)格類型的數(shù)據(jù)庫(kù)所不能做的事。

1.0 存儲(chǔ)類型與數(shù)據(jù)類型

存儲(chǔ)在 SQLite 數(shù)據(jù)庫(kù)中的每個(gè)值(或是由數(shù)據(jù)庫(kù)引擎所操作的值)都有一個(gè)以下的存儲(chǔ)類型:

  •     NULL. 值是空值。
  •     INTEGER. 值是有符號(hào)整數(shù),根據(jù)值的大小以1,2,3,4,6 或8字節(jié)存儲(chǔ)。
  •     REAL. 值是浮點(diǎn)數(shù),以8字節(jié) IEEE 浮點(diǎn)數(shù)存儲(chǔ)。
  •     TEXT. 值是文本字符串,使用數(shù)據(jù)庫(kù)編碼(UTF-8, UTF-16BE 或 UTF-16LE)進(jìn)行存儲(chǔ)。
  •     BLOB. 值是一個(gè)數(shù)據(jù)塊,按它的輸入原樣存儲(chǔ)。

注意,存儲(chǔ)類型比數(shù)據(jù)類型更籠統(tǒng)。以 INTEGER 存儲(chǔ)類型為例,它包括6種不同的長(zhǎng)度不等的整數(shù)類型,這在磁盤上是不同的。但是只要 INTEGER 值從磁盤讀取到內(nèi)存進(jìn)行處理,它們就被轉(zhuǎn)換為更為一般的數(shù)據(jù)類型(8字節(jié)有符號(hào)整型)。因此在一般情況下,“存儲(chǔ)類型” 與 “數(shù)據(jù)類型” 沒(méi)什么差別,這兩個(gè)術(shù)語(yǔ)可以互換使用。

SQLite 版本3數(shù)據(jù)庫(kù)中的任何列,除了整型主鍵列,都可用于存儲(chǔ)任何存儲(chǔ)類型的值。

SQL 語(yǔ)句中的任何值,無(wú)論它們是嵌入到 SQL 語(yǔ)句中的字面量還是綁定到預(yù)編譯 SQL 語(yǔ)句中的參數(shù),都有一個(gè)隱含的存儲(chǔ)類型。在下述情況下,數(shù)據(jù)庫(kù)引擎會(huì)在執(zhí)行查詢時(shí)在數(shù)值存儲(chǔ)類型(INTEGER 和 REAL)和 TEXT 之間進(jìn)行轉(zhuǎn)換。

1.1 布爾類型

SQLite 并沒(méi)有單獨(dú)的布爾存儲(chǔ)類型,而是將布爾值存儲(chǔ)為整數(shù) 0 (false) 和 1 (true)。
1.2 日期和時(shí)間類型

SQLite 沒(méi)有另外的存儲(chǔ)類型來(lái)存儲(chǔ)日期和時(shí)間。SQLite 的內(nèi)置的日期和時(shí)間函數(shù)能夠?qū)⑷掌诤蜁r(shí)間存為 TEXT、REAL 或 INTEGER 值:

  •     TEXT  ISO8601 字符串 ("YYYY-MM-DD HH:MM:SS.SSS")。
  •     REAL 儒略日數(shù) (Julian Day Numbers),按照前公歷,自格林威治時(shí)間公元前4714年11月24日中午以來(lái)的天數(shù)。
  •     INTEGER Unix 時(shí)間,自 1970-01-01 00:00:00 UTC 以來(lái)的秒數(shù)。

應(yīng)用可以選擇這些格式中的任一種存儲(chǔ)日期和時(shí)間,并使用內(nèi)置的日期和時(shí)間函數(shù)在這些格式間自由轉(zhuǎn)換。

2.0 類型親和性

為了最大限度地提高 SQLite 和其它數(shù)據(jù)庫(kù)引擎之間的兼容性,SQLite 支持列的“類型親和性”的概念。列的類型親和性是指數(shù)據(jù)存儲(chǔ)于該列的推薦類型。這里重要的思想是類型是推薦的,而不是必須的。任何列仍可以存儲(chǔ)任何類型的數(shù)據(jù)。這只是讓一些列有選擇性地優(yōu)先使用某種存儲(chǔ)類型。一個(gè)列的首選存儲(chǔ)類型被稱為它的“親和性”。

每個(gè) SQLite 3 數(shù)據(jù)庫(kù)中的列都?xì)w于以下的類型親和性中的一種:

  •     TEXT
  •     NUMERIC
  •     INTEGER
  •     REAL
  •     NONE

一個(gè)具有 TEXT 親和性的列使用存儲(chǔ)類型 NULL、 TEXT 或 BLOB 存儲(chǔ)所有數(shù)據(jù)。如果數(shù)值數(shù)據(jù)被插入到一個(gè)具有 TEXT 親和性的列,則數(shù)據(jù)在存儲(chǔ)前被轉(zhuǎn)換為文本形式。

數(shù)值親和性的列可能包含了使用所有五個(gè)存儲(chǔ)類的值。當(dāng)插入文本數(shù)據(jù)到數(shù)值列時(shí),該文本的存儲(chǔ)類型被轉(zhuǎn)換成整型或?qū)崝?shù)(按優(yōu)先級(jí)排序)如果這種轉(zhuǎn)換是無(wú)損或可逆的的話。對(duì)于文本與實(shí)數(shù)類型之間的轉(zhuǎn)換,如果前15個(gè)重要十進(jìn)制數(shù)字被保留的話,SQLite認(rèn)為這種轉(zhuǎn)換是無(wú)損并可逆的。如果文本不能無(wú)損地轉(zhuǎn)換成整型或?qū)崝?shù),那這個(gè)值將以文本類型存儲(chǔ)。不要試圖轉(zhuǎn)換NULL或BLOB值。

一個(gè)字符串可能看上去像帶有小數(shù)點(diǎn)和/或指數(shù)符的浮點(diǎn)文字,但只要這個(gè)值可以用一個(gè)整型表示,數(shù)值親和性就會(huì)把它轉(zhuǎn)換成一個(gè)整型。因此,字符串‘3.0e+5'以整型300000,而不是浮點(diǎn)值30000.0的形式存儲(chǔ)在一個(gè)數(shù)值親和性的列里。


一個(gè)使用整型親和性的列與具有數(shù)值親和性的列表現(xiàn)一致。只是在CAST表達(dá)式里,它們之間的區(qū)別體現(xiàn)得明顯。

除了強(qiáng)制將整型值轉(zhuǎn)換成浮點(diǎn)表示外,一個(gè)具有實(shí)數(shù)親和性的列與具有數(shù)值親和性的列表現(xiàn)一致(作為一個(gè)內(nèi)部的優(yōu)化,為了少占用空間,無(wú)小數(shù)部分且存儲(chǔ)在實(shí)數(shù)親和性列上的小浮點(diǎn)值以整型形式寫到磁盤,讀出時(shí)自動(dòng)轉(zhuǎn)換回浮點(diǎn)值。在SQL級(jí)別,這種優(yōu)化是完全不可見(jiàn)的,并且只能通過(guò)檢查數(shù)據(jù)庫(kù)文件的原始比特檢測(cè)到)。

一個(gè)具有NONE親和性的列不能從一種存儲(chǔ)類型轉(zhuǎn)換成另一種,也不要試圖強(qiáng)制對(duì)它進(jìn)行轉(zhuǎn)換。

2.1 列親和性測(cè)定

列的親和性是由它的聲明類型決定的,按照以下順序所示的規(guī)則:

1. 如果聲明類型包含字符串“INT”,那它被指定為整型親和性;

2. 如果列的聲明類型包含任何“CHAR”、“CLOB”或“TEXT”字符串,那么該列具有文本親和性。注意:VARCHAR類型包含“CHAR”并且被指定為文本親和性;

3. 如果列的聲明類型包含“BLOB”或者沒(méi)有指定類型,那這列具有NONE親和性;

4. 如果列的聲明類型包含任何“REAL”、“FLOA”或“DOUB”字符串,則該列具有實(shí)數(shù)親和性;

5. 否則,它將具有數(shù)值親和性。

注意:判定列親和性規(guī)則的順序是很重要的。一個(gè)具有“CHARINT”聲明類型的列將匹配規(guī)則1和2,但是規(guī)則1優(yōu)先所有該列具有整型親和性。

2.2 親和性名字實(shí)例

下表顯示了有多少?gòu)母鼈鹘y(tǒng)的SQL實(shí)現(xiàn)的常用數(shù)據(jù)類型名,通過(guò)上一節(jié)介紹的五個(gè)規(guī)則被轉(zhuǎn)換成各種親和性類型。這張表只顯示了SQLite可接受的一小部分?jǐn)?shù)據(jù)類型名。注意:跟在類型名后,括號(hào)內(nèi)數(shù)值參數(shù)(如:VARCHAR(255))將被SQLite忽略 - SQLite不對(duì)字符串、BLOBs或數(shù)值的長(zhǎng)度強(qiáng)加任何限制(除了大型全局SQLITE_MAX_LENGTH限制)。

注意: 因?yàn)樵凇癙OINT”末尾的“INT”,一個(gè)“ FLOATING POINT”聲明類型 會(huì)被賦予整型親和性,而不是實(shí)數(shù)親和性。而且“STRING”聲明類型具有數(shù)值親和性,而不是文本親和性。

2.3 列親和性行為實(shí)例

以下SQL演示當(dāng)有值插入到一張表時(shí),SQLite如何使用列親和性實(shí)現(xiàn)類型轉(zhuǎn)換的:
 

CREATE TABLE t1(
  t TEXT,   -- text affinity by rule 2
  nu NUMERIC, -- numeric affinity by rule 5
  i INTEGER, -- integer affinity by rule 1
  r REAL,   -- real affinity by rule 4
  no BLOB   -- no affinity by rule 3
);

 

-- Values stored as TEXT, INTEGER, INTEGER, REAL, TEXT.(值分別以文本、整型、整型、實(shí)數(shù)、文本形式存儲(chǔ))
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
 
-- Values stored as 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
 
-- Values stored as 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
 
-- BLOBs are always stored as BLOBs regardless of column affinity. 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
 
-- NULLs are also unaffected by affinity
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 比較表達(dá)式

同標(biāo)準(zhǔn)SQL一樣,SQLite 3支持如下的比較操作符:"=", "==", "", "=", ">", ">=", "!=", ">", "IN", "NOT IN", "BETWEEN", "IS", 以及 "IS NOT"。
3.1 排序規(guī)則

比較的結(jié)果與操作數(shù)的存儲(chǔ)類型有關(guān),同時(shí)依據(jù)以下的規(guī)則:

  •     NULL值小于其他任何值(包括另外一個(gè)NULL)
  •     INTEGER或REAL小于TEXT,BLOB值;若兩個(gè)INTEGER(或者REAL)比較,則按照實(shí)際的數(shù)值進(jìn)行。
  •     TEXT小于BLOB,若兩個(gè)TEXT比較,結(jié)果則由適當(dāng)?shù)恼眄樞驔Q定
  •     若兩個(gè)BLOD比較,與memcmp()的結(jié)果一致


3.2 操作數(shù)進(jìn)行比較時(shí)的相似性

在進(jìn)行值的比較之前,SQLite會(huì)嘗試在存儲(chǔ)類INTEGER、REAL和/或TEXT之間進(jìn)行值的轉(zhuǎn)換。在比較之前嘗不嘗試進(jìn)行轉(zhuǎn)換完全取決于操作數(shù)的相似性。操作數(shù)相似性的判定規(guī)則如下:

  •     只是對(duì)一個(gè)列中的值進(jìn)行引用的表達(dá)式同被引用的列具有完全相同的相似性。注意,如果X、Y.Z代表的是列的名稱,那么+X和+Y.Z可以認(rèn)為是為了判定其相似性的表達(dá)式。
  •     "CAST(expr AS type)"所表示的表達(dá)式同類型定義為"type"的列具有完全相同的相似性。
  •     其它情況下的表達(dá)式具有NONE相似性。


3.3 比較前的類型轉(zhuǎn)換

“應(yīng)用相似性”("apply affinity")的意思是,當(dāng)且僅當(dāng)所涉及的轉(zhuǎn)換是無(wú)損且可逆的情況下,將一個(gè)操作數(shù)轉(zhuǎn)換為某特定的存儲(chǔ)類型。在進(jìn)行比較之前對(duì)比較運(yùn)算符的操作數(shù)應(yīng)用相似性的規(guī)則如下按順序所示:

  •     如果其中的一個(gè)操作數(shù)具有INTEGER、REAL或者NUMERIC相似性而另外一個(gè)操作數(shù)具有TEXT或者NONE相似性,那么就要對(duì)這另外一個(gè)操作數(shù)應(yīng)用NUMERIC 相似性。
  •     如果其中的一個(gè)操作數(shù)具有TEXT相似性而另外一個(gè)具有NONE相似性,那么就要對(duì)這另外一個(gè)操作數(shù)應(yīng)用TEXT相似性。
  •     其它情況下不會(huì)應(yīng)用任何相似性,兩個(gè)操作數(shù)按照各自的原樣進(jìn)行比較。

將表達(dá)式"a BETWEEN b AND c"看作兩個(gè)單獨(dú)的二元比較運(yùn)算"a >= b AND a = c",即使這么一來(lái),可能會(huì)造成其中的a在兩次比較中會(huì)被應(yīng)用不同的相似性,也要這么處理。Datatype conversions in comparisons of the form 在"x IN (SELECT y ...)"這種形式的比較中,數(shù)據(jù)類型的轉(zhuǎn)換完全同"x=y"一樣進(jìn)行處理。表達(dá)式"a IN (x, y, z, ...)" 同"a = +x OR a = +y OR a = +z OR ..."等價(jià)。換句話說(shuō),IN運(yùn)算符右側(cè)的值(本例中就是"x", "y", and "z")被看作是無(wú)相似性的,即使它們湊巧是某列的值或者是CAST表達(dá)式。

3.4 比較示例
 

CREATE TABLE t1(
  a TEXT,   -- text affinity
  b NUMERIC,  -- numeric affinity
  c BLOB,   -- no affinity
  d      -- no affinity
);
 
-- Values will be stored as TEXT, INTEGER, TEXT, and INTEGER respectively
INSERT INTO t1 VALUES('500', '500', '500', 500);
SELECT typeof(a), typeof(b), typeof(c), typeof(d) FROM t1;
text|integer|text|integer
 
-- Because column "a" has text affinity, numeric values on the
-- right-hand side of the comparisons are converted to text before
-- the comparison occurs.
SELECT a  40,  a  60,  a  600 FROM t1;
0|1|1
 
-- Text affinity is applied to the right-hand operands but since
-- they are already TEXT this is a no-op; no conversions occur.
SELECT a  '40', a  '60', a  '600' FROM t1;
0|1|1
 
-- Column "b" has numeric affinity and so numeric affinity is applied
-- to the operands on the right. Since the operands are already numeric,
-- the application of affinity is a no-op; no conversions occur. All
-- values are compared numerically.
SELECT b  40,  b  60,  b  600 FROM t1;
0|0|1
 
-- Numeric affinity is applied to operands on the right, converting them
-- from text to integers. Then a numeric comparison occurs.
SELECT b  '40', b  '60', b  '600' FROM t1;
0|0|1
 
-- No affinity conversions occur. Right-hand side values all have
-- storage class INTEGER which are always less than the TEXT values
-- on the left.
SELECT c  40,  c  60,  c  600 FROM t1;
0|0|0
 
-- No affinity conversions occur. Values are compared as TEXT.
SELECT c  '40', c  '60', c  '600' FROM t1;
0|1|1
 
-- No affinity conversions occur. Right-hand side values all have
-- storage class INTEGER which compare numerically with the INTEGER
-- values on the left.
SELECT d  40,  d  60,  d  600 FROM t1;
0|0|1
 
-- No affinity conversions occur. INTEGER values on the left are
-- always less than TEXT values on the right.
SELECT d  '40', d  '60', d  '600' FROM t1;
1|1|1

若示例中的比較被替換——例如"a40"被寫作"40>a"——所有的結(jié)果依然相同相同。
4.0 操作符

所有的數(shù)學(xué)運(yùn)算符(+, -, *, /, %, , >>, , and |)在展開(kāi)前會(huì)將兩個(gè)操作數(shù)放入 NUMERIC 儲(chǔ)存類。即使這個(gè)過(guò)程是有損和不可逆轉(zhuǎn)的。一個(gè) NULL 操作數(shù)在數(shù)學(xué)運(yùn)算符上產(chǎn)生一個(gè) NULL 結(jié)果。在數(shù)算運(yùn)算符上的操作數(shù)不被視為數(shù)字,NULL 并不會(huì)被轉(zhuǎn)為0或0.0。

5.0 排序, 分組 和 組合查詢

當(dāng)查詢結(jié)果使用 ORDER BY 子句排序時(shí), 存儲(chǔ)類型的NULL空值是排在第一位的, 其次是INTEGER和散布在數(shù)字順序的REAL數(shù)據(jù), 其次是按照核對(duì)序列順序的TEXT值, 最后為memcmp() order 的BLOB值. 排序之前不會(huì)出現(xiàn)任何存儲(chǔ)類型轉(zhuǎn)換.

當(dāng)使用GROUP BY 子句分組時(shí)不同類型的值被認(rèn)為是不同的數(shù)據(jù), 除了INTEGER 和 REAL 值如果他們數(shù)值相等則被認(rèn)為是相同的的數(shù)據(jù). 沒(méi)有任何親和性適用于GROUP BY 子句結(jié)果的任意值.

組合查詢使用 UNION, INTERSECT 和 EXCEPT 在數(shù)據(jù)之間執(zhí)行隱式的比較. 沒(méi)有任何親和性適用于與UNION, INTERSECT, 或者 EXCEPT關(guān)聯(lián)的隱式比較的運(yùn)算數(shù)  - 數(shù)據(jù)的比較就像這樣.

6.0 整理序列

當(dāng) SQLite 比較兩個(gè)字符串時(shí),它使用一個(gè)整理序列或整理函數(shù)(一物兩表)來(lái)決定當(dāng)兩個(gè)字符串相同時(shí),哪個(gè)字符串值更高。SQLite 擁有三個(gè)內(nèi)建整理函數(shù):BINARY, NOCASE, 和 RTRIM。

  •     BINARY - 使用 memcmp() 比較字符串,無(wú)視文本編碼。
  •     NOCASE - 與二進(jìn)制比較相同,除了 ASCII 的26個(gè)大寫字母在比較前將會(huì)轉(zhuǎn)為其小寫形勢(shì)。注意,只有 ASCII 字符會(huì)大小寫轉(zhuǎn)化。 由于表大小的需求,SQLite 并不會(huì)嘗試 UTF 大小寫轉(zhuǎn)化。
  •     RTRIM - 與二進(jìn)制比較相同,除了尾部空格符將被忽略。

應(yīng)用可以通過(guò) sqlite3_create_collation() 接口注冊(cè)額外的整理函數(shù)。

6.1 設(shè)定SQL中的排列順序

每個(gè)表中的每一個(gè)列都具有一個(gè)相關(guān)的排序函數(shù)。如果沒(méi)有顯式地定義排序函數(shù),那么,就會(huì)缺省使用BINARY作為排序函數(shù)。列定義中的COLLATE子句可為列定義一個(gè)可選的排序函數(shù)。

對(duì)于二元比較運(yùn)算符(=, , >, =, >=, !=, IS, and IS NOT)來(lái)說(shuō),判定到底使用哪個(gè)排序函數(shù)的規(guī)則按順序如下所列:

  •     如果兩個(gè)操作數(shù)中有任意一個(gè)操作數(shù)具有使用后綴COLLATE運(yùn)算符顯式定義的排序函數(shù),那么就會(huì)用該函數(shù)進(jìn)行比較,如果兩個(gè)操作數(shù)都有的情況下,優(yōu)先使用左操作數(shù)的排序函數(shù)。
  •     如果兩個(gè)操作數(shù)中任意一個(gè)操作數(shù)是一個(gè)列,那么就會(huì)使用該列的排序函數(shù)進(jìn)行比較,但在兩個(gè)操作數(shù)都是列的情況下,優(yōu)先使用左操作數(shù)對(duì)應(yīng)的列的排序函數(shù)。為了達(dá)到這句話的目的,列名前帶有1個(gè)或多個(gè)一元運(yùn)算符"+"的,仍然按原列名處理。
  •     其它情況下,采用BINARY排序函數(shù)進(jìn)行比較。

比較運(yùn)算中的操作數(shù),如果在它的任何子表達(dá)式中使用了后綴 COLLATE運(yùn)算符,就可以認(rèn)為是具有顯式的排序函數(shù)(上文中的規(guī)則1)。 再者,如果在比較表達(dá)式中的任何地方使用了 COLLATE運(yùn)算符,那么該運(yùn)算符所定義的排序函數(shù)就會(huì)用于字符串的比較,而無(wú)論在表達(dá)式中出現(xiàn)了表中的哪一列。如果在比較中的任何地方出現(xiàn)了兩個(gè)或多個(gè) COLLATE運(yùn)算符子表達(dá)式,無(wú)論在表達(dá)式中嵌入得多深,也無(wú)論表達(dá)式是怎么使用括號(hào)的,都會(huì)使用出現(xiàn)在最左側(cè)的顯式排序函數(shù)。

表達(dá)式"x BETWEEN y and z"從邏輯上講,同"x >= y AND x = z"這兩個(gè)比較運(yùn)算完全等價(jià),在使用排序函數(shù)時(shí)它們倆要象兩個(gè)本來(lái)就是獨(dú)立的比較運(yùn)算一樣進(jìn)行處理。在判定排列順序時(shí),表達(dá)式"x IN (SELECT y ...)"處理方式完全同表達(dá)式"x = y"一樣,形如"x IN (y, z, ...)"的表達(dá)式,排列順序完全同X的排列順序一樣。

作為 SELECT語(yǔ)句的一個(gè)部分,ORDER BY子句中排序條件也可以通過(guò)使用COLLATE運(yùn)算符設(shè)定排列順序,如果設(shè)定了排序時(shí)就要按照設(shè)定的排序函數(shù)進(jìn)行排序。否則,如果ORDER BY子句使用的排序表達(dá)式是一個(gè)列,那么該列的排列順序就用于判定排列順序。如果該排序表達(dá)式不是列并且也無(wú)COLLATE子句,就會(huì)使用BINARY排列順序。

6.2 整理序列示例

下面的示例將識(shí)別整理序列,決定 SQL 語(yǔ)句的文本比較結(jié)果。注意,在文本比較時(shí),如果是數(shù)字,二進(jìn)制或Null值,整理序列可能并沒(méi)有被使用。
 

CREATE TABLE t1(
  x INTEGER PRIMARY KEY,
  a,         /* collating sequence BINARY */
  b COLLATE BINARY, /* collating sequence BINARY */
  c COLLATE RTRIM,  /* collating sequence RTRIM */
  d COLLATE NOCASE  /* collating sequence 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 的文本比較表現(xiàn)為使用 BINARY (二進(jìn)制)整理序列。 */
SELECT x FROM t1 WHERE a = b ORDER BY x;
--結(jié)果 1 2 3
 
/* a=b 的文本比較表現(xiàn)為使用 RTRIM 整理序列。 */
SELECT x FROM t1 WHERE a = b COLLATE RTRIM ORDER BY x;
--結(jié)果 1 2 3 4
 
/* d=a 的文本比較表現(xiàn)為使用 NOCASE 整理序列。 */
SELECT x FROM t1 WHERE d = a ORDER BY x;
--結(jié)果 1 2 3 4
 
/* a=d 的文本比較表現(xiàn)為使用 BINARY (二進(jìn)制)整理序列。 */
SELECT x FROM t1 WHERE a = d ORDER BY x;
--結(jié)果 1 4
 
/* 'abc'=c 的文本比較表現(xiàn)為使用 RTRIM (二進(jìn)制)整理序列。 */
SELECT x FROM t1 WHERE 'abc' = c ORDER BY x;
--結(jié)果 1 2 3
 
/* c='abc' 的文本比較表現(xiàn)為使用 RTRIM 整理序列。 */
SELECT x FROM t1 WHERE c = 'abc' ORDER BY x;
--結(jié)果 1 2 3
 
/* 分組表現(xiàn)為使用 NOCASE 整理序列(值'abc','ABC' 和 'Abc'
** 被分為同一組)。*/
SELECT count(*) FROM t1 GROUP BY d ORDER BY 1;
--結(jié)果 4
 
/* 分組表現(xiàn)為使用 BINARY 整理序列(值'abc','ABC' 和 'Abc'
** 被分為不同的組)。*/
SELECT count(*) FROM t1 GROUP BY (d || '') ORDER BY 1;
--結(jié)果 1 1 2
 
/* 列c排序表現(xiàn)為使用 RTRIM 整理序列。*/(譯注:sorting or column c 疑為 sorting of...誤寫)
SELECT x FROM t1 ORDER BY c, x;
--結(jié)果 4 1 2 3
 
/* (c||'')排序表現(xiàn)為使用 BINARY 整理序列。*/
SELECT x FROM t1 ORDER BY (c||''), x;
--結(jié)果 4 2 3 1
 
/* 列c排序表現(xiàn)為使用 NOCASE 整理序列。*/
SELECT x FROM t1 ORDER BY c COLLATE NOCASE, x;
--結(jié)果 2 4 3 1

您可能感興趣的文章:
  • 詳解SQLite中的查詢規(guī)劃器
  • 簡(jiǎn)單分析SQLite4的一些設(shè)計(jì)改變
  • SQLite快速入門指南

標(biāo)簽:威海 荊門 瀘州 景德鎮(zhèn) 江蘇 柳州 淮安 那曲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解SQLite中的數(shù)據(jù)類型》,本文關(guān)鍵詞  詳解,SQLite,中的,數(shù)據(jù),類型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解SQLite中的數(shù)據(jù)類型》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解SQLite中的數(shù)據(jù)類型的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    狠狠色丁香婷婷综合久久片| 日韩一区二区三区四区| 国产精品污污网站在线观看 | 看片的网站亚洲| 国产精品国产三级国产aⅴ中文 | 麻豆精品视频在线观看视频| 亚洲视频图片小说| 国产片一区二区| 国产制服丝袜一区| 美女视频一区二区| 亚洲一区二区不卡免费| 中文字幕第一页久久| 久久精品一区四区| 精品国产乱子伦一区| 欧美一区二区三区视频免费播放| 日本道精品一区二区三区| 高清shemale亚洲人妖| 九色综合国产一区二区三区| 男男gaygay亚洲| 日韩影院免费视频| 爽好久久久欧美精品| 五月激情综合网| 亚洲成人免费观看| 亚洲h在线观看| 亚洲不卡一区二区三区| 亚洲国产人成综合网站| 亚洲成人免费电影| 久久久欧美精品sm网站| 久久久99精品久久| 国产视频在线观看一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 欧美日韩一区二区欧美激情 | 欧美电影免费观看高清完整版| 91在线云播放| 日本黄色一区二区| 欧美午夜精品久久久| 777xxx欧美| 日韩精品一区二区三区中文精品| 欧美tk—视频vk| 中文字幕第一区综合| 亚洲欧美一区二区三区极速播放| 亚洲免费观看视频| 亚洲chinese男男1069| 久久99日本精品| 成人精品在线视频观看| 色域天天综合网| 日韩精品中文字幕在线不卡尤物 | 日本怡春院一区二区| 久久精品国产亚洲aⅴ| 国产一区二区调教| 麻豆久久久久久久| 高清不卡在线观看av| 日本高清免费不卡视频| 日韩一区二区三区视频在线观看| 国产欧美日韩另类视频免费观看| 久久精品在线观看| 亚洲第一在线综合网站| 国产麻豆精品在线观看| 91美女片黄在线| 欧美xxxxx裸体时装秀| 亚洲精品视频在线看| 久久成人久久鬼色| 色偷偷成人一区二区三区91 | 国产精品久久久久一区二区三区 | 亚洲人成7777| 蜜桃91丨九色丨蝌蚪91桃色| 成人午夜视频在线| 欧美精品高清视频| 国产精品女人毛片| 久久99深爱久久99精品| 欧洲视频一区二区| xvideos.蜜桃一区二区| 亚洲午夜久久久久| 成人丝袜18视频在线观看| 91麻豆精品国产自产在线| 国产精品免费aⅴ片在线观看| 日本成人超碰在线观看| 97精品久久久久中文字幕| 精品国产青草久久久久福利| 一区二区激情小说| 99久久婷婷国产精品综合| 日韩欧美黄色影院| 亚洲国产精品久久艾草纯爱| 粉嫩绯色av一区二区在线观看| 宅男在线国产精品| 午夜精品久久久久影视| 91在线视频官网| 中国色在线观看另类| 国产精品18久久久久久久久 | av中文字幕在线不卡| 久久日韩粉嫩一区二区三区 | 国产成人精品影院| 成人黄色免费短视频| 久久久久国产一区二区三区四区| 日韩电影在线看| 欧美日韩成人综合天天影院| 日韩一区在线免费观看| 顶级嫩模精品视频在线看| 精品日本一线二线三线不卡| 日本中文一区二区三区| 欧美一区二视频| 免费成人深夜小野草| 欧美一区三区四区| 黄一区二区三区| 2021国产精品久久精品| 国产乱码精品一区二区三区五月婷| 日韩一区二区在线观看| 久久精品国产精品亚洲红杏| 日韩一级片在线播放| 精品一区二区三区视频在线观看| 在线综合+亚洲+欧美中文字幕| 天天av天天翘天天综合网 | 视频一区二区三区中文字幕| 欧美日韩精品一区二区天天拍小说| 一个色在线综合| 51精品国自产在线| 免费高清成人在线| 久久久av毛片精品| 99精品国产99久久久久久白柏| ...av二区三区久久精品| 色8久久精品久久久久久蜜| 亚洲国产成人tv| 欧美一区日韩一区| 国产精品1024久久| 亚洲欧美另类小说| 666欧美在线视频| 国产精品中文有码| 亚洲欧洲精品一区二区三区不卡| 欧美在线制服丝袜| 欧美a一区二区| 日本一区二区三区免费乱视频| 色综合av在线| 蜜桃视频一区二区| 中文字幕成人av| 欧美一区二区三区视频免费 | 国产精品久久三区| 91超碰这里只有精品国产| 国产在线精品不卡| 成人欧美一区二区三区1314| 欧美性色欧美a在线播放| 久久国产免费看| 亚洲理论在线观看| 精品国产制服丝袜高跟| 午夜私人影院久久久久| 日本一二三四高清不卡| 欧美三级中文字幕在线观看| 久久国产尿小便嘘嘘| 一区二区欧美视频| 久久久久久久久久久99999| 欧美天堂亚洲电影院在线播放| 久久狠狠亚洲综合| 亚洲伦理在线精品| 国产日韩欧美高清在线| 欧美精品久久久久久久多人混战 | 欧美极品少妇xxxxⅹ高跟鞋| 在线亚洲+欧美+日本专区| 国产一区二区不卡老阿姨| 一卡二卡欧美日韩| 亚洲人精品午夜| 国产日韩欧美不卡在线| 精品视频123区在线观看| 成人性视频免费网站| 紧缚捆绑精品一区二区| 亚洲va天堂va国产va久| 国产精品久久久久久久久免费樱桃| 6080国产精品一区二区| 91黄色免费看| 91麻豆文化传媒在线观看| 成人va在线观看| 国产91在线|亚洲| 国产精品99久久久久久久vr| 美女视频网站黄色亚洲| 日本在线不卡一区| 日本午夜精品视频在线观看| 亚洲欧美二区三区| 国产精品伦理一区二区| 久久精品亚洲乱码伦伦中文| 日韩久久久精品| 久久久亚洲国产美女国产盗摄| 欧美大片在线观看一区二区| 69堂亚洲精品首页| 精品国产凹凸成av人网站| 精品美女一区二区| 99精品视频在线观看免费| 色哟哟国产精品| 91福利国产成人精品照片| 欧洲精品一区二区| 欧美日韩在线一区二区| 欧美午夜不卡在线观看免费| 欧美精品九九99久久| 日韩欧美国产精品| 精品国产一区二区三区av性色| 精品成人一区二区三区四区| 久久综合丝袜日本网| 国产欧美一区二区精品仙草咪| 欧美激情一区二区三区不卡 | 国产精品无遮挡| 亚洲欧美日韩综合aⅴ视频| 亚洲图片激情小说| 亚洲一二三四区|