程序员人生 网站导航

SQLite小结

栏目:数据库应用时间:2014-12-19 08:06:46


1般数据采取的固定的静态数据类型,而SQLite采取的是动态数据类型,会根据存入值自动判断。SQLite具有以下5种数据类型:

1.NULL:空值。
2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。
3.REAL:浮点数字,存储为8-byte IEEE浮点数。
4.TEXT:字符串文本。
5.BLOB:2进制对象。


为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明以后,SQLite都会根据该字段声明时的类型为其选择1种亲缘类型,当数据插入时,该字段的数据将会优先采取亲缘类型作为该值的存储方式,除非亲缘类型不匹配或没法转换当前数据到该亲缘类型,这样SQLite才会斟酌其它更合适该值的类型存储该值。SQLite目前的版本支持以下5种亲缘类型:


1. 决定字段亲缘性的规则:
    字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以以下表。需要注意的是以以下表的顺序,即如果某1字段类型同时符合两种亲缘性,那末排在前面的规则将先产生作用。
    1). 如果类型字符串中包括"INT",那末该字段的亲缘类型是INTEGER。
    2). 如果类型字符串中包括"CHAR"、"CLOB"或"TEXT",那末该字段的亲缘类型是TEXT,如VARCHAR。
    3). 如果类型字符串中包括"BLOB",那末该字段的亲缘类型是NONE。
    4). 如果类型字符串中包括"REAL"、"FLOA"或"DOUB",那末该字段的亲缘类型是REAL。
    5). 其余情况下,字段的亲缘类型为NUMERIC。

    2. 具体示例:



但实际上,sqlite3也接受以下的数据类型:
 smallint 16 位元的整数。
 interger 32 位元的整数。
 decimal(p,s) p 精确值和 s 大小的10进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
 float  32位元的实数。
 double  64位元的实数。
 char(n)  n 长度的字串,n不能超过 254。
 varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
 graphic(n) 和 char(n) 1样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
 vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000
 date  包括了 年份、月份、日期。
 time  包括了 小时、分钟、秒。
 timestamp 包括了 年、月、日、时、分、秒、千分之1秒。

datetime 包括日期时间格式,必须写成'2010-08-05'不能写为'2010⑻⑸',否则在读取时会产生毛病!


SQLite包括了以下时间/日期函数:
datetime().......................产生日期和时间
date()...........................产生日期
time()...........................产生时间
strftime().......................对以上3个函数产生的日期和时间进行格式化

datetime()的用法是:datetime(日期/时间,修正符,修正符...)
date()和time()的语法与datetime()相同。

在时间/日期函数里可使用以下格式的字符串作为参数:
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是产生现在的时间。


strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它情势的字符串。
strftime()的语法是strftime(格式, 日期/时间, 修正符, 修正符, ...)

它可以用以下的符号对日期和时间进行格式化:
%d 月份, 01⑶1
%f 小数情势的秒,SS.SSS
%H 小时, 00⑵3
%j 算出某1天是该年的第几天,001⑶66
%m 月份,00⑴2
%M 分钟, 00⑸9
%s 从1970年1月1日到现在的秒数
%S 秒, 00⑸9
%w 星期, 0⑹ (0是星期天)
%W 算出某1天属于该年的第几周, 01⑸3
%Y 年, YYYY
%% 百分号

strftime()的用法举例以下:


例11.select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
结果:2006.10.17 21:41:09


sqlite函数篇:
算术函数
abs(X) 返回给定数字表达式的绝对值。
max(X,Y[,...]) 返回表达式的最大值。
min(X,Y[,...]) 返回表达式的最小值。
random(*) 返回随机数。
round(X[,Y]) 返回数字表达式并4舍5入为指定的长度或精度。
字符处理函数
length(X) 返回给定字符串表达式的字符个数。
lower(X) 将大写字符数据转换为小写字符数据后返回字符表达式。
upper(X) 返回将小写字符数据转换为大写的字符表达式。
substr(X,Y,Z) 返回表达式的1部份。
randstr()  
quote(A)  
like(A,B) 肯定给定的字符串是不是与指定的模式匹配。
glob(A,B)  
条件判断函数
coalesce(X,Y[,...])  
ifnull(X,Y)  
nullif(X,Y)  
集合函数
avg(X) 返回组中值的平均值。
count(X) 返回组中项目的数量。
max(X) 返回组中值的最大值。
min(X) 返回组中值的最小值。
sum(X) 返回表达式中所有值的和。
其他函数
typeof(X) 返回数据的类型。
last_insert_rowid() 返回最后插入的数据的ID。
sqlite_version(*) 返回SQLite的版本。
change_count() 返回受上1语句影响的行数。
last_statement_change_count()



------分隔线----------------------------
------分隔线----------------------------

最新技术推荐