SQLite3支持的數據類型

SQLite支持的數據類型(日期函數)

數據庫技術 2010-06-29 11:17:30 閱讀73 評論0   字號: 訂閱

SQLite驅動支持的SQL 列類型
類型描述
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, BYTEA
不限制長度的字符串類型. 二進制數據必須安全地編碼存儲, 見text類型.
CHAR(), VARCHAR(), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
不限制長度的字符串類型. 不會被截斷或者填充
ENUM
不限制長度的字符串類型. 不像 MySQL, 使用 ENUM代替 VARCHAR不會節省存儲空間.
SET
不限制長度的字符串類型. In contrast to MySQL, the input is not checked against the list of allowed values.
YEAR
不限制長度的字符串類型. MySQL 用1個字節 存儲 2 個或者 4 個數字年份, 而SQLite 存爲一個字符串.
TINYINT, INT1, CHAR
A 1 byte type used to store one character, a signed integer between -128 and 127, or an unsigned integer between 0 and 255.
SMALLINT, INT2
2 byte (short) integer type used to store a signed integer between -32768 and 32767 or an unsigned integer between 0 and 65535.
MEDIUMINT
3 byte integer type used to store a signed integer between -8388608 and 8388607 or an unsigned integer between 0 and 16777215.
INT, INTEGER, INT4
4字節 (long)整數類型,用來存儲一個有符號的整數,範圍從-2147483648 到 2147483647, 或者一個有符號的整數,範圍從 0到
4294967295.
BIGINT, INT8, INTEGER PRIMARY KEY
8 字節 (long long) 整型,用來存儲有符號的整數,從
-9223372036854775808 到 9223372036854775807 , 或者無符號的整數,從0到 18446744073709551615.  請看下面關於
INTEGER PRIMARY KEY的討論(哈哈,rowid就是8個字節的整數)
DECIMAL, NUMERIC
A string type of unlimited length used to store floating-point numbers of arbitrary precision.
TIMESTAMP, DATETIME
用來存儲日期/時間的不限制長度的字符串類型.
要求的格式是 ‘YYYY-MM-DD HH:MM:SS’,其他的東西被忽略.
DATE
用來存儲日期的不限制長度的字符串類型. 要求的格式是
‘YYYY-MM-DD’, 別的格式的東西會被忽略.
TIME
用來存儲時間的不限制長度的字符串類型. 要求的格式是 ‘HH:MM:SS’,其他格式的東西會被忽略.
FLOAT, FLOAT4, REAL
A
4 byte floating-point number. The range is -3.402823466E+38 to
-1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. Please
note that MySQL treats REAL as an 8 byte instead of a 4 byte float like
PostgreSQL.
DOUBLE, DOUBLE PRECISION, FLOAT8
An
8 byte floating-point number. The range is -1.7976931348623157E+308 to
-2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to
1.7976931348623157E+308.
以上資料翻譯自  http://libdbi-drivers.sourceforge.net/docs/dbd_sqlite3/x123.html
關於 INTEGER PRIMARY KEY的討論,請參考http://zhiwei.li/text/ 上關於SQLite的一些資料
__________________________________________________________________________________________
Sqlite3支持的數據類型
 NULL
 INTEGER
 REAL
 TEXT
 BLOB
但實際上,sqlite3也接受如下的數據類型:
 smallint 16 位元的整數。
 interger 32 位元的整數。
 decimal(p,s) p 精確值和 s 大小的十進位整數,精確值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) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是爲了支援兩個字元長度的字體,例如中文字。
 vargraphic(n) 可變長度且其最大長度爲 n 的雙字元字串,n不能超過 2000
 date  包含了 年份、月份、日期。
 time  包含了 小時、分鐘、秒。
 timestamp 包含了 年、月、日、時、分、秒、千分之一秒。
 
SQLite包含了如下時間/日期函數:
datetime().......................產生日期和時間
date()...........................產生日期
time()...........................產生時間
strftime().......................對以上三個函數產生的日期和時間進行格式化
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是產生現在的時間。
舉例(寫這個筆記的時間是2006年10月17日晚8點到10點,測試環境:SQLite 2.8.17,WinXP,北京時間):
例1.
select datetime('now');
結果:2006-10-17 12:55:54
例2.
select datetime('2006-10-17');
結果:2006-10-17 12:00:00
例3.
select datetime('2006-10-17 00:20:00','+1 hour','-12 minute');
結果:2006-10-17 01:08:00本篇文章來源於:開發學院 http://edu.codepub.com   原文鏈接:http://edu.codepub.com/2010/0121/19984.php

例4.
select date('2006-10-17','+1 day','+1 year');
結果:2007-10-18
例5.
select datetime('now','start of year');
結果:2006-01-01 00:00:00
例6.
select datetime('now','start of month');
結果:2006-10-01 00:00:00
例7.
select datetime('now','start of day');
結果:2006-10-17 00:00:00
例8.
select datetime('now','+10 hour','start of day','+10 hour');
結果:2006-10-17 10:00:00
例9.
select datetime('now','localtime');
結果:2006-10-17 21:21:47
例10.
select datetime('now','+8 hour');
結果:2006-10-17 21:24:45
例3中的+1 hour和-12 minute表示可以在基本時間上(datetime函數的第一個參數)增加或減少一定時間。
例5中的start of year表示一年開始的時間。
從例8可以看出,儘管第2個參數加上了10個小時,但是卻被第3個參數“start of day”把時間歸零到00:00:00,隨後的第4個參數在00:00:00
的基礎上把時間增加了10個小時變成了10:00:00。
例9把格林威治時區轉換成本地時區。
例10把格林威治時區轉換成東八區。
strftime()函數可以把YYYY-MM-DD HH:MM:SS格式的日期字符串轉換成其它形式的字符串。
strftime()的語法是strftime(格式, 日期/時間, 修正符, 修正符, ...)
它可以用以下的符號對日期和時間進行格式化:
%d 月份, 01-31
%f 小數形式的秒,SS.SSS
%H 小時, 00-23
%j 算出某一天是該年的第幾天,001-366
%m 月份,00-12
%M 分鐘, 00-59
%s 從1970年1月1日到現在的秒數
%S 秒, 00-59
%w 星期, 0-6 (0是星期天)
%W 算出某一天屬於該年的第幾周, 01-53
%Y 年, YYYY
%% 百分號
strftime()的用法舉例如下:
例11.
select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
結果:2006.10.17 21:41:09
函數篇:
算術函數
abs(X) 返回給定數字表達式的絕對值。
max(X,Y[,...]) 返回表達式的最大值。
min(X,Y[,...]) 返回表達式的最小值。
random(*) 返回隨機數。
round(X[,Y]) 返回數字表達式並四捨五入爲指定的長度或精度。
字符處理函數
length(X) 返回給定字符串表達式的字符個數。
lower(X) 將大寫字符數據轉換爲小寫字符數據後返回字符表達式。
upper(X) 返回將小寫字符數據轉換爲大寫的字符表達式。
substr(X,Y,Z) 返回表達式的一部分。
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() 返回受上一語句影響的行數。
last_statement_change_count()
   管理工具:http://www.sqlitedeveloper.com/   
   SQLite :http://sqlite.phxsoftware.com/  本篇文章來源於:開發學院 http://edu.codepub.com   原文鏈接:http://edu.codepub.com/2010/0121/19984_2.php

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章