abs(X) 返回參數X的絕對值。
coalesce(X,Y,...) 返回第一個非空參數的副本。若所有的參數均為NULL,返回NULL。至少2個參數。
glob(X,Y) 用於實現SQLite的 "X GLOB Y"語法。可使用 sqlite3_create_function() 重載該函數從而改變GLOB運算符的功能。
ifnull(X,Y) 返回第一個非空參數的副本。 若兩個參數均為NULL,返回NULL。與上面的 coalesce()類似。
last_insert_rowid() 返回當前數據庫連接最后插入行的ROWID。sqlite_last_insert_rowid() API函數同樣可用於得到該值。
length(X) 返回X的長度,以字符計。如果SQLite被配置為支持UTF-8,則返回UTF-8字符數而不是字節數。
like(X,Y [,Z]) 用於實現SQL語法"X LIKE Y [ESCAPE Z]".若使用可選的ESCAPE子句,則函數被賦予三個參數,否則只有兩個。可使用sqlite3_create_function() 重載該函數從而改變LIKE運算符的功能。 注意同時重載like()的兩參數和三參數版本,否則在使用/不使用 ESCAPE子句時,LIKE運算符的實現可能使用的是不同的代碼。
lower(X) 返回X字符串的所有字符小寫化版本。這一轉換使用C語言庫的tolower()函數,對UTF-8字符不能提供好的支持。
max(X,Y,...) 返回最大值。參數可以不僅僅為數字,可以為字符串。大小順序由常用的排序法則決定。注意,max()在有2個或更多參數時為簡單函數,但當僅給出一個參數時它變為聚集函數。
min(X,Y,...) 返回最小值。與max()類似。
nullif(X,Y) 當兩參數不同時返回X,否則返回NULL.
quote(X) 返回參數的適於插入其它SQL語句中的值。字符串會被添加單引號,在內部的引號前會加入逃逸符號。 BLOB被編碼為十六進制文本。當前的VACUUM使用這一函數實現。在使用觸發器實現撤銷/重做功能時這一函數也很有用。
random(*) 返回介於-2147483648和 +2147483647之間的隨機整數。
round(X)
round(X,Y) 將X四舍五入,保留小數點后Y位。若忽略Y參數,則默認其為0。
soundex(X) 計算字符串X的soundex編碼。參數為NULL時返回字符串"?000".缺省的SQLite是不支持該函數的,當編譯時選項 -DSQLITE_SOUNDEX=1 時該函數才可用。
sqlite_version(*) 返回所運行的SQLite庫的版本號字符串。如 "2.8.0"。
substr(X,Y,Z) 返回輸入字符串X中以第Y個字符開始,Z個字符長的子串。 X最左端的字符序號為1。若Y為負,則從右至左數起。若SQLite配置支持UTF-8,則“字符”代表的是UTF-8字符而非字節。
typeof(X) 返回表達式X的類型。返回值可能為"null", "integer", "real", "text", 以及 "blob". SQLite的類型處理參見SQLite3的數據類型.
upper(X) 返回X字符串的所有字符大寫化版本。這一轉換使用C語言庫的toupper()函數,對UTF-8字符不能提供好的支持。
以下是缺省可用的聚集函數列表。可以使用C語言寫出其它的聚集函數然后使用sqlite3_create_function() API函數添加到數據庫引擎中。
在單參數聚集函數中,參數可以加前綴DISTINCT。這時重復參數會被過濾掉,然后才穿入到函數中。例如,函數"count(distinct X)"返回字段X的不重復非空值的個數,而不是字段X的全部非空值。
avg(X) 返回一組中非空的X的平均值。非數字值作0處理。avg()的結果總是一個浮點數,即使所有的輸入變量都是整數。
count(X)
count(*) 返回一組中X是非空值的次數的第一種形式。第二種形式(不帶參數)返回該組中的行數。
max(X) 返回一組中的最大值。大小由常用排序法決定。
min(X) 返回一組中最小的非空值。大小由常用排序法決定。僅在所有值為空時返回NULL。
sum(X)
total(X) 返回一組中所有非空值的數字和。若沒有非空行,sum()返回NULL而total()返回0.0. NULL通常情況下並不是對於“沒有行”的和的一個有意義的結果,但SQL標准如此要求,且大部分其它SQL數據庫引擎這樣定義sum(),所以SQLite 也如此定義以保證兼容。我們提供非標准的total()函數作為解決該SQL語言設計問題的一個簡易方法。
total()的返回值式中為浮點數。sum()可以為整數,當所有非空輸入均為整數時,和是精確的。 若sum()的任意一個輸入既非整數也非NULL或計算中產生整數類型的溢出時,sum()返回接近真和的浮點數。
SQLite的日期時間函數
1.date(日期時間字符串, 修正符, 修正符, ……)
2.time(日期時間字符串, 修正符, 修正符, ……)
3.datetime(日期時間字符串, 修正符, 修正符, ……)
4.julianday(日期時間字符串, 修正符, 修正符, ……)
5.strftime(日期時間格式, 日期時間字符串, 修正符, 修正符, ……)
上述五個函數需要一個日期時間字符串做參數,后面可以跟零到多個修正符參數。而 strftime() 函數還需要一個日期時間格式字符串做第一個參數。
1.date() 函數返回一個以 “YYYY-MM-DD” 為格式的日期;
2.time() 函數返回一個以 “YYYY-MM-DD HH:MM:SS” 為格式的日期時間;
3.julianday() 函數返回一個天數,從格林威治時間公元前4714年11月24號開始算起;
4.strftime() 函數返回一個經過格式話的日期時間,它可以用下面的符號對日期和時間進行格式化:
%d 一月中的第幾天 01-31
%f 小數形式的秒,SS.SSSS
%H 小時 00-24
%j 一年中的第幾天 01-366
%J Julian Day Numbers
%m 月份 01-12
%M 分鍾 00-59
%s 從 1970-01-01日開始計算的秒數
%S 秒 00-59
%w 星期,0-6,0是星期天
%W 一年中的第幾周 00-53
%Y 年份 0000-9999
%% % 百分號
其他四個函數都可以用 strftime() 函數來表示:
1.date(…) -> strftime(“%Y-%m-%d”,…)
2.time(…) -> strftime(“%H:%M:%S”,…)
3.datetime(…) -> strftime(“%Y-%m-%d %H:%M:%S”,…)
4.julianday(…) -> strftime(“%J”,…)
日期時間字符串,可以用以下幾種格式:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDD.DDDD
在第五種到第七種格式中的“T”是一個分割日期和時間的字符;第八種到第十種格式只代表2000-01-01日的時間,第十一種格式的’now’表示返回一個當前的日期和時間,使用格林威治時間(UTC);第十二種格式表示一個 Julian Day Numbers。
修正符,日期和時間可以使用下面的修正符來更改日期或時間:
NNN days
NNN hours
NNN minutes
NNN.NNNN seconds
NNN months
NNN years
start of month
start of year
start of week
start of day
weekday N
unixepoch
localtime
utc
前六個修正符就是簡單的增加指定數值的時間和日期;第七到第十個修正符表示返回當前日期的開始;第十一個修正符表示返回下一個星期是N的日期和時間;第十二個修正符表示返回從1970-01-01開始算起的秒數;第十三個修正符表示返回本地時間。
下面舉一些例子:
計算機當前時間
SELECT date(‘now’)
計算機當前月份的最后一天
SELECT date(‘now’,’start of month’,’+1 month’,’-1 day’)
計算UNIX 時間戳1092941466表示的日期和時間
SELECT datetime(‘1092941466’,’unixepoch’)
計算 UNIX 時間戳1092941466 表示的本地日期和時間
SELECT datetime(‘1092941466’,’unixepoch’,’localtime’)
計算機當前UNIX 時間戳
SELECT strftime(‘%s’,’now’)
兩個日期之間相差多少天
SELECT jolianday(‘now’)-jolianday(‘1981-12-23’)
兩個日期時間之間相差多少秒
SELECT julianday('now')*86400 - julianday('2004-01-01 02:34:56')*86400
計算今年十月份第一個星期二的日期
SELECT date('now','start of year','+9 months','weekday 2');
SQLite函數整理
SQLite包含了如下時間/日期函數: datetime()的用法是:datetime(日期/時間,修正符,修正符...) 舉個例子: strftime()函數可以把YYYY-MM-DD HH:MM:SS格式的日期字符串轉換成其它形式的字符串。 舉個例子: 在使用中發現SQLite不支持YYYY-MM-DD格式化,所以使用了strftime來處理。 SQLite內建函數表
|