1般數(shù)據(jù)采取的固定的靜態(tài)數(shù)據(jù)類(lèi)型,而SQLite采取的是動(dòng)態(tài)數(shù)據(jù)類(lèi)型,會(huì)根據(jù)存入值自動(dòng)判斷。SQLite具有以下5種數(shù)據(jù)類(lèi)型:
1.NULL:空值。
2.INTEGER:帶符號(hào)的整型,具體取決有存入數(shù)字的范圍大小。
3.REAL:浮點(diǎn)數(shù)字,存儲(chǔ)為8-byte IEEE浮點(diǎn)數(shù)。
4.TEXT:字符串文本。
5.BLOB:2進(jìn)制對(duì)象。
為了最大化SQLite和其它數(shù)據(jù)庫(kù)引擎之間的數(shù)據(jù)類(lèi)型兼容性,SQLite提出了"類(lèi)型親緣性(Type Affinity)"的概念。我們可以這樣理解"類(lèi)型親緣性 ",在表字段被聲明以后,SQLite都會(huì)根據(jù)該字段聲明時(shí)的類(lèi)型為其選擇1種親緣類(lèi)型,當(dāng)數(shù)據(jù)插入時(shí),該字段的數(shù)據(jù)將會(huì)優(yōu)先采取親緣類(lèi)型作為該值的存儲(chǔ)方式,除非親緣類(lèi)型不匹配或沒(méi)法轉(zhuǎn)換當(dāng)前數(shù)據(jù)到該親緣類(lèi)型,這樣SQLite才會(huì)斟酌其它更合適該值的類(lèi)型存儲(chǔ)該值。SQLite目前的版本支持以下5種親緣類(lèi)型:
1. 決定字段親緣性的規(guī)則:
字段的親緣性是根據(jù)該字段在聲明時(shí)被定義的類(lèi)型來(lái)決定的,具體的規(guī)則可以參照以以下表。需要注意的是以以下表的順序,即如果某1字段類(lèi)型同時(shí)符合兩種親緣性,那末排在前面的規(guī)則將先產(chǎn)生作用。
1). 如果類(lèi)型字符串中包括"INT",那末該字段的親緣類(lèi)型是INTEGER。
2). 如果類(lèi)型字符串中包括"CHAR"、"CLOB"或"TEXT",那末該字段的親緣類(lèi)型是TEXT,如VARCHAR。
3). 如果類(lèi)型字符串中包括"BLOB",那末該字段的親緣類(lèi)型是NONE。
4). 如果類(lèi)型字符串中包括"REAL"、"FLOA"或"DOUB",那末該字段的親緣類(lèi)型是REAL。
5). 其余情況下,字段的親緣類(lèi)型為NUMERIC。
2. 具體示例:
但實(shí)際上,sqlite3也接受以下的數(shù)據(jù)類(lèi)型:
smallint 16 位元的整數(shù)。
interger 32 位元的整數(shù)。
decimal(p,s) p 精確值和 s 大小的10進(jìn)位整數(shù),精確值p是指全部有幾個(gè)數(shù)(digits)大小值,s是指小數(shù)點(diǎn)後有幾位數(shù)。如果沒(méi)有特別指定,則系統(tǒng)會(huì)設(shè)為 p=5; s=0 。
float 32位元的實(shí)數(shù)。
double 64位元的實(shí)數(shù)。
char(n) n 長(zhǎng)度的字串,n不能超過(guò) 254。
varchar(n) 長(zhǎng)度不固定且其最大長(zhǎng)度為 n 的字串,n不能超過(guò) 4000。
graphic(n) 和 char(n) 1樣,不過(guò)其單位是兩個(gè)字元 double-bytes, n不能超過(guò)127。這個(gè)形態(tài)是為了支援兩個(gè)字元長(zhǎng)度的字體,例如中文字。
vargraphic(n) 可變長(zhǎng)度且其最大長(zhǎng)度為 n 的雙字元字串,n不能超過(guò) 2000
date 包括了 年份、月份、日期。
time 包括了 小時(shí)、分鐘、秒。
timestamp 包括了 年、月、日、時(shí)、分、秒、千分之1秒。
datetime 包括日期時(shí)間格式,必須寫(xiě)成'2010-08-05'不能寫(xiě)為'2010⑻⑸',否則在讀取時(shí)會(huì)產(chǎn)生毛??!
SQLite包括了以下時(shí)間/日期函數(shù):
datetime().......................產(chǎn)生日期和時(shí)間
date()...........................產(chǎn)生日期
time()...........................產(chǎn)生時(shí)間
strftime().......................對(duì)以上3個(gè)函數(shù)產(chǎn)生的日期和時(shí)間進(jìn)行格式化
datetime()的用法是:datetime(日期/時(shí)間,修正符,修正符...)
date()和time()的語(yǔ)法與datetime()相同。
在時(shí)間/日期函數(shù)里可使用以下格式的字符串作為參數(shù):
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
其中now是產(chǎn)生現(xiàn)在的時(shí)間。
strftime()函數(shù)可以把YYYY-MM-DD HH:MM:SS格式的日期字符串轉(zhuǎn)換成其它情勢(shì)的字符串。
strftime()的語(yǔ)法是strftime(格式, 日期/時(shí)間, 修正符, 修正符, ...)
它可以用以下的符號(hào)對(duì)日期和時(shí)間進(jìn)行格式化:
%d 月份, 01⑶1
%f 小數(shù)情勢(shì)的秒,SS.SSS
%H 小時(shí), 00⑵3
%j 算出某1天是該年的第幾天,001⑶66
%m 月份,00⑴2
%M 分鐘, 00⑸9
%s 從1970年1月1日到現(xiàn)在的秒數(shù)
%S 秒, 00⑸9
%w 星期, 0⑹ (0是星期天)
%W 算出某1天屬于該年的第幾周, 01⑸3
%Y 年, YYYY
%% 百分號(hào)
strftime()的用法舉例以下:
例11.select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
結(jié)果:2006.10.17 21:41:09
sqlite函數(shù)篇:
算術(shù)函數(shù)
abs(X) 返回給定數(shù)字表達(dá)式的絕對(duì)值。
max(X,Y[,...]) 返回表達(dá)式的最大值。
min(X,Y[,...]) 返回表達(dá)式的最小值。
random(*) 返回隨機(jī)數(shù)。
round(X[,Y]) 返回?cái)?shù)字表達(dá)式并4舍5入為指定的長(zhǎng)度或精度。
字符處理函數(shù)
length(X) 返回給定字符串表達(dá)式的字符個(gè)數(shù)。
lower(X) 將大寫(xiě)字符數(shù)據(jù)轉(zhuǎn)換為小寫(xiě)字符數(shù)據(jù)后返回字符表達(dá)式。
upper(X) 返回將小寫(xiě)字符數(shù)據(jù)轉(zhuǎn)換為大寫(xiě)的字符表達(dá)式。
substr(X,Y,Z) 返回表達(dá)式的1部份。
randstr()
quote(A)
like(A,B) 肯定給定的字符串是不是與指定的模式匹配。
glob(A,B)
條件判斷函數(shù)
coalesce(X,Y[,...])
ifnull(X,Y)
nullif(X,Y)
集合函數(shù)
avg(X) 返回組中值的平均值。
count(X) 返回組中項(xiàng)目的數(shù)量。
max(X) 返回組中值的最大值。
min(X) 返回組中值的最小值。
sum(X) 返回表達(dá)式中所有值的和。
其他函數(shù)
typeof(X) 返回?cái)?shù)據(jù)的類(lèi)型。
last_insert_rowid() 返回最后插入的數(shù)據(jù)的ID。
sqlite_version(*) 返回SQLite的版本。
change_count() 返回受上1語(yǔ)句影響的行數(shù)。
last_statement_change_count()