- 我的MYSQL學習心得(1) :簡單語法
- 我的MYSQL學習心得(2) :資料型別寬度
- 我的MYSQL學習心得(3) : 檢視欄位長度
- 我的MYSQL學習心得(4) : 資料型別
- 我的MYSQL學習心得(5) : 運算子
這一節主要介紹MYSQL裡的函式,MYSQL裡的函式很多,我這裡主要介紹MYSQL裡有而SQLSERVER沒有的函式
數學函式
1、求餘函式MOD(X,Y)
MOD(X,Y)返回x被y除後的餘數,MOD()對於帶有小數部分的數值也起作用,他返回除法運算後的精確餘數
1 |
SELECT MOD(31,8) |
2、四捨五入函式TRUNCATE(X,Y)
TRUNCATE(X,Y)返回被捨去至小數點後y位的數字x。若y的值為0,則結果不帶有小數點或不帶有小數部分。
若y設為負數,則截去(歸零)x小數點左邊起第y位開始後面所有低位的值。
1 |
SELECT TRUNCATE(1.32,1) |
TRUNCATE(1.32,1)保留小數點後一位數字,返回值為1.3
TIPS:ROUND(X,Y)函式在擷取值的時候會四捨五入,而TRUNCATE(x,y)直接擷取值,並不進行四捨五入
3、求餘函式HEX(X)和UNHEX(X)函式
有以下的程式碼可以演示HEX和UNHEX的功能:
1 |
SELECT HEX('this is a test str') |
查詢的結果為:746869732069732061207465737420737472
1 |
SELECT UNHEX('746869732069732061207465737420737472') |
查詢的結果為:this is a test str
字串函式
計算字串字元數的函式
1、CHAR_LENGTH(STR)返回值為字串str所包含的字元個數。一個多位元組字元算作一個單字元
1 |
SELECT CHAR_LENGTH('DATE') |
2、合併字串函式CONCAT_WS(x,s1,s2,……)
CONCAT_WS(x,s1,s2,……),CONCAT_WS代表CONCAT with Separator,是CONCAT()函式的特殊形式。
第一個引數x是其他引數的分隔符,分隔符的位置放在要連線的兩個字串之間。分隔符可以是一個字串,也可以是
其他引數。如果分隔符為NULL,則結果為NULL。函式會忽略任何分隔符引數後的NULL值。
1 |
SELECT CONCAT_WS('-','1st','2nd','3rd'),CONCAT_WS('-','1st',NULL,'3rd') |
CONCAT_WS(‘-‘,’1st’,’2nd’,’3rd’)使用分隔符‘-’將3個字串連線成一個字串,結果為“1st-2nd-3rd”;
CONCAT_WS(‘-‘,’1st’,NULL,’3rd’)因為第二個值為NULL,所以第二個值不會出現在結果裡
3、替換字串的函式INSERT(S1,X,LEN,S2)
INSERT(S1,X,LEN,S2)函式跟SQLSERVER裡的STUFF()函式的功能是一樣的,這裡不作介紹了
4、填充字串的函式LPAD(S1,LEN,S2)和RPAD(S1,LEN,S2)
LPAD(S1,LEN,S2)返回字串s1,其左邊由字串s2填補到len字串長度。假如s1的長度大於len,則返回值被縮短至len字元。
LPAD()函式和RPAD()函式功能跟SQLSERVER裡的 REPLACE()相似,不過功能更加強大
1 |
SELECT LPAD('hello',4,'??'),LPAD('hello',10,'??') |
字串“hello”長度大於4,不需要填充,因此LPAD(‘hello’,4,’??’)只返回被縮短的長度為4的子串
字串“hello”長度小於10,LPAD(‘hello’,10,’??’)返回結果為“?????hello”,左側填充“?”,長度為10
5、RPAD(S1,LEN,S2)返回字串s1,其右邊被字串s2填補至len字元長度。假如字串s1的長度大於len,則返回值被縮短到len字元長度
1 |
SELECT RPAD('hello',4,'?') |
字串“hello”長度大於4,不需要填充,因此RPAD(‘hello’,4,’?’)只返回被縮短的長度為4的子串”hell”
6、刪除空格的函式TRIM(S)
TRIM(S)刪除字串s兩側的空格
MYSQL這裡比SQLSERVER方便,SQLSERVER要刪除兩邊的空格,需要使用: SELECT LTRIM(RTRIM(‘ hello ‘))
1 |
SELECT TRIM(' book ') |
刪除指定字串的函式TRIM(S1 FROM S)
7、TRIM(S1 FROM S)刪除字串s中兩端所有的子字串s1。s1為可選項,在未指定情況下,刪除空格
1 |
SELECT TRIM('xy' FROM 'xyxboxyokxxyxy') |
‘xyxboxyokxxyxy’兩端的重複字串“xy”,而中間的“xy”並不刪除,結果為
1 |
xboxyokx |
8、重複生成字串的函式REPEAT(S,N)
這個函式跟SQLSERVER裡的REPLICATE()函式是一樣的,引數個數都是一樣的,這裡不作介紹了
9、比較字串大小的函式STRCMP(S1,S2)
STRCMP(S1,S2)若所有的字串均相同,則返回0;若根據當前分類次序,第一個引數小於第二個,則返回-1,其他情況返回1
1 |
SELECT STRCMP('txt','txt2') ,STRCMP('txt2','txt'),STRCMP('txt','txt') |
“txt”小於“txt2”,因此 STRCMP(‘txt’,’txt2′) 返回結果為-1
STRCMP(‘txt2′,’txt’)返回結果為1
“txt”與“txt”相等,因此STRCMP(‘txt’,’txt’)返回結果為0
10、匹配子串開始位置的函式
LOCATE(STR1,STR)、POSITION(STR1 IN STR)、INSTR(STR,STR1)3個函式作用相同,返回子字串str1在字串str中的開始位置
這三個函式跟SQLSERVER裡的CHARINDEX()函式功能類似
1 |
SELECT LOCATE('ball','football'),POSITION('ball' IN 'football') ,INSTR('football','ball') |
子字串“ball”在字串“football”中從第5個字母位置開始,因此3個函式返回結果都為5
11、返回指定位置的字串的函式
ELT(N,字串1,字串2,字串3,…,),若N=1,則返回值為字串1,若N=2,則返回值為字串2,以此類推。
若N小於1或大於引數的數目,則返回值為NULL
1 |
SELECT ELT(3,'1st','2nd','3rd'),ELT(3,'net','os') |
由結果可以看到,ELT(3,’1st’,’2nd’,’3rd’)返回第3個位置的字串“3rd”;指定返回字串位置超出引數個數,返回NULL
12、返回指定字串位置的函式FIELD(S,S1,S2,…)
FIELD(S,S1,S2,…)返回字串s在列表s1,s2,……中第一次出現的位置,在找不到s的情況下,返回值為0。
如果s為NULL,則返回值為0,原因是NULL不能同任何值進行同等比較。
1 2 |
SELECT FIELD('hi','hihi','hey','hi','bas') AS coll, FIELD('hi','hihi','lo','hilo','foo') AS col2 |
FIELD(‘hi’,’hihi’,’hey’,’hi’,’bas’)函式中字串hi出現在列表的第3個字串位置,因此返回結果為3
FIELD(‘hi’,’hihi’,’lo’,’hilo’,’foo’) 列表中沒有字串hi,因此返回結果為0
13、返回子串位置的函式FIND_IN_SET(S1,S2)
FIND_IN_SET(S1,S2)返回字串s1在字串列表s2中出現的位置,字串列表是一個由多個逗號
‘,’分開的字串組成的列表。如果s1不在s2或s2為空字串,則返回值為0。如果任意一個引數為NULL,則返回值為NULL。
這個函式在第一個引數包含一個逗號‘,’時將無法正常執行。
1 |
SELECT FIND_IN_SET('hi','hihi,hey,hi,bas') |
雖然FIND_IN_SET(S1,S2)和FIELD(S,S1,S2,…)兩個函式格式不同,但作用類似,都可以返回指定字串在字串列表中的位置
14、選取字串的函式MAKE_SET(X,S1,S2,…)
MAKE_SET(X,S1,S2,…)返回由x的二進位制數指定的相應位的字串組成的字串,s1對應位元1,s2對應位元01以此類推。
s1,s2…中的NULL值不會被新增到結果中。
1 2 |
SELECT MAKE_SET(1,'a','b','c') AS col1, MAKE_SET(1|4,'hello','nice','world') AS col2 |
1的二進位制值為0001,4的二進位制值為0100,1與4進行異或操作之後的二進位制值為0101,從右到左第一位和第三位為1。
MAKE_SET(1,’a’,’b’,’c’)返回第一個字串
MAKE_SET(1|4,’hello’,’nice’,’world’) 返回從左端開始第一和第三個字串組成的字串
日期和時間函式
1、獲取當前日期的函式和獲取當前時間的函式
CURDATE()、CURRENT_DATE()、CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE()
以上函式都是返回當前日期和時間值,MYSQL的函式數量的確比SQLSERVER多很多,SQLSERVER獲取當前時間和日期用的
函式是: SELECT GETDATE()
1 |
SELECT NOW() |
返回UTC日期的函式和返回UTC時間的函式
MYSQL裡返回UTC日期和時間是分開的,而SQLSERVER裡是一起的
1 |
SELECT GETUTCDATE() |
MYSQL
1 |
SELECT UTC_DATE(),UTC_TIME() |
2、獲取月份的函式MONTHNAME(DATE)
MONTHNAME(DATE)函式返回日期date對應月份的英文全名
1 |
SELECT MONTHNAME('2013-8-2') |
返回8月份的英文
3、獲取季度、分鐘和秒鐘的函式
QUARTER(DATE)返回date對應的一年中的季度值,範圍是從1~4
使用QUARTER(DATE)函式返回指定日期對應的季度
1 |
SELECT QUARTER('11-04-01') |
4月份在第二季度,所以返回2
4、MINUTE(TIME)返回time對應的分鐘數,範圍是從0~59
1 |
SELECT MINUTE('11-02-03 10:10:06') |
返回10分鐘
5、SECOND(time) 返回time對應的秒數,範圍是從0~59
1 |
SELECT SECOND('10:23:10') |
返回10秒
6、獲取日期的指定值的函式EXTRACT(type FROM date)
EXTRACT(type FROM date)這個函式跟SQLSERVER裡的DATEPART()函式是一樣的
獲取日期中的年份
SQLSERVER
1 |
SELECT DATEPART(YEAR,'2013-2-3') |
MYSQL
1 |
SELECT EXTRACT(YEAR FROM '2013-2-3') |
7、時間和秒鐘轉換的函式
TIME_TO_SEC(time)返回已轉化為秒的time引數,轉換公式為:小時*3600+分鐘*60+秒
1 |
SELECT TIME_TO_SEC('23:22:00') |
SEC_TO_TIME(second)函式可以將秒轉換為小時、分鐘和秒數的second引數值
1 |
SELECT SEC_TO_TIME('84120') |
SEC_TO_TIME(second)函式和TIME_TO_SEC(time)函式互為反函式
8、計算日期和時間的函式
MYSQL裡計算日期和時間的函式比較多
增加日期:DATE_ADD(date,interval expr type),ADDDATE(date,interval expr type)
減去日期:DATE_SUB(date,interval expr type),SUBDATE(date,interval expr type)
增加時間:ADD_TIME(date,expr)
減去時間:SUBTIME(date,expr)
時間差:DATEDIFF()
日期和時間格式化:
DATE_FORMAT(date,format)
TIME_FORMAT(time,format)
返回日期時間字串的顯示格式:GET_FORMAT(val_type,format_type)
相對來說,SQLSERVER在時間日期方面的計算就沒有那麼多函式了
基本上SQLSERVER利用下面兩個函式來通殺日期時間計算的場景
1 |
SELECT DATEADD(),DATEDIFF() |
條件判斷函式
條件判斷函式也稱為流程控制函式,根據滿足的條件的不同,執行相應的流程。
MYSQL中進行條件判斷的函式有IF、IFNULL、CASE
雖然SQLSERVER裡也有IF和CASE,不過MYSQL裡的IF語句的語法跟SQLERVER有很大出入
1、IF(expr,v1,v2)函式
IF(expr,v1,v2)如果表示式expr是TRUE(expr<>0 and expr<>NULL),則IF()的返回值為v1;
否則返回值為v2。IF()的返回值為數字值或字串值,具體情況視其所在語境而定
1 |
SELECT IF(1>2,2,3) |
1>2的結果為FALSE,IF(1>2,2,3)返回第二個表示式的值3。
TIPS:如果v1或v2中只有一個明確是NULL,則IF()函式的結果型別為非NULL表示式的結果型別。
2、IFNULL(V1,V2)函式
IFNULL(V1,V2)假如v1不為NULL,則IFNULL(V1,V2)的返回值為v1;否則其返回值為v2。
IFNULL()的返回值是數字或是字串,具體情況視語境而定
1 |
SELECT IFNULL(1,2),IFNULL(NULL,10) |
IFNULL(1,2)雖然第二個值也不為空,但返回結果依然是第一個值;
IFNULL(NULL,10)第一個值為空,因此返回“10”
注意:IFNULL(V1,V2)函式跟SQLSERVER裡的 SELECT NULLIF() 函式不一樣
SQLSERVER裡的NULLIF函式
需要兩個引數,如果兩個指定的表示式等價,則返回null
例子:NULLIF(a,b)
說明:如果a和b是相等的,那麼返回NULL,如果不相等返回a
select NULLIF(‘eqeqweqwe’,’1′) 結果是eqeqweqwe
select NULLIF(1,1) 結果是NULL
a和b的型別要一致
3、CASE函式
注意:一個CASE表示式的預設返回值型別是任何返回值的相容集合型別,但具體情況視其所在語境而定。
如果用字串語境中,則返回結果為字串。如果用在數字語境中,則返回結果為十進位制、實數值或整數值
這個資料型別在拼接SQL語句的時候特別容易忽略,有時候會在拼接SQL語句的時候,case 後面的表示式或者when後面的表示式不一致報錯!
參考文章:http://support.microsoft.com/kb/969467/zh-cn
修補程式: 錯誤訊息,當您執行查詢時,SQL Server 2008年中使用 CASE 函式:”轉換失敗時轉換為資料型別 < Type2 > < Type1 > 值 < 值 >”
在MSDN論壇也有一個相關的帖子,大概是因為拼接sql的時候case 後面的表示式值的資料型別和else後面的表示式值的資料型別不一致導致拼接sql失敗
具體的帖子地址忘記了,也找不到,如果找到以後會補充上
系統資訊函式
1、獲取MYSQL版本號、連線數和資料庫名的函式
VERSION()返回指示MYSQL伺服器版本的字串。這個字串使用utf8字符集
1 |
SELECT VERSION() |
2、CONNECTION_ID()返回MYSQL伺服器當前連線的次數,每個連線都有各自唯一的ID
檢視當前使用者的連線數
1 |
SELECT CONNECTION_ID() |
這裡返回1,返回值根據登入的次數會有不同。
3、SHOW PROCESSLIST;
4、SHOW FULL PROCESSLIST;
processlist命令的輸出結果顯示了有哪些執行緒在執行,不僅可以檢視當前所有的連線數,還可以檢視當前的連線狀態
幫助識別出有問題的查詢語句等。
如果是root帳號,能看到所有使用者的當前連線。如果是其他普通帳號,則只能看到自己佔用的連線。showprocesslist只能列出當前100條
如果想全部列出,可以使用SHOW FULL PROCESSLIST命令
1 |
SHOW PROCESSLIST |
1 |
SHOW FULL PROCESSLIST |
show full processlist會看到連線使用的記憶體
show processlist
show full processlist
各個列的含義
(1)id列,使用者登入mysql時,系統分配的“connection_id”
(2)user列,顯示當前使用者。如果不是root,這個命令就只顯示使用者許可權範圍的sql語句
(3)host列,顯示這個語句是從哪個ip的哪個埠上發的,可以用來跟蹤出現問題語句的使用者
(4)db列,顯示這個程式目前連線的是哪個資料庫
(5)command列,顯示當前連線的執行的命令,一般取值為休眠(sleep),查詢(query),連線(connect)
(6)time列,顯示這個狀態持續的時間,單位是秒
(7)state列,顯示使用當前連線的sql語句的狀態,很重要的列,後續會有所有狀態的描述,state只是語句執行中的某一個狀態。一個sql語句,
以查詢為例
可能需要經過
copying to tmp table,
sorting result,
sending data
等狀態才可以完成
(8)info列,顯示這個sql語句,是判斷問題語句的一個重要依據。
5、DATABASE()和SCHEMA()函式返回使用utf8字符集的預設(當前)資料庫名
1 |
SELECT DATABASE(),SCHEMA() |
可以看到,兩個函式的作用相同
6、獲取使用者名稱的函式
USER()、CURRENT_USER()、CURRENT_USER、SYSTEM_USER()、SESSION_USER()
這幾個函式返回當前被MYSQL伺服器驗證的使用者名稱和主機名組合。這個值符合確定當前登入使用者
存取許可權的MYSQL帳戶。一般情況下,這幾個函式的返回值是相同的。
1 |
SELECT USER(),CURRENT_USER(),SYSTEM_USER() |
返回結果指示了當前帳戶連線伺服器的使用者名稱以及所連線的客戶主機,root為當前登入的使用者名稱,localhost為登入的主機名
7、獲取字串的字符集和排序方式的函式
CHARSET(STR)返回字串str自變數的字符集
1 |
SELECT CHARSET('abc') ,CHARSET(CONVERT('abc' USING latin1)),CHARSET(VERSION()) |
CHARSET(‘abc’)返回系統預設的字符集utf8;
CHARSET(CONVERT(‘abc’ USING latin1))返回的字符集為latin1;
VERSION()返回的字串使用utf8字符集,因此CHARSET返回結果為utf8
8、COLLATION(str)返回字串str的字元排列方式
1 |
SELECT COLLATION(_latin2 'abc'),COLLATION(CONVERT('abc' USING utf8)) |
可以看到,使用不同字符集時字串的排列方式不同
9、獲取最後一個自動生成的ID值的函式
LAST_INSERT_ID()自動返回最後一個INSERT或UPDATE為AUTO_INCREMENT列設定的第一個發生的值
(1)一次插入一條記錄
首先建立表worker,其ID欄位帶有AUTO_INCREMENT約束
1 2 3 4 |
CREATE TABLE worker( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, NAME VARCHAR(30) ) |
分別單獨向表worker插入2條記錄
1 2 3 4 |
INSERT INTO worker VALUES(NULL,'jimmy'); INSERT INTO worker VALUES(NULL,'tom') SELECT * FROM worker |
檢視已經插入的資料可以發現,最後一條插入的記錄的ID欄位值為2,使用LAST_INSERT_ID()檢視最後自動生成的ID值
1 |
SELECT LAST_INSERT_ID() |
可以看到,一次插入一條記錄時,返回值為最後一條插入記錄的ID值
(2)一次同時插入多條記錄
接下來,向表中插入多條記錄
1 |
INSERT INTO worker VALUES(NULL,'kevin'),(NULL,'michal'),(NULL,'nick') |
查詢已經插入的記錄
1 |
SELECT * FROM worker |
可以看到最後一條記錄的ID欄位值為5,使用LAST_INSERT_ID()檢視最後自動生成的ID值
1 |
SELECT LAST_INSERT_ID() |
結果顯示,ID欄位值不是5而是3,這是為什麼呢?
在向資料表插入一條記錄時,LAST_INSERT_ID()返回帶有AUTO_INCREMENT約束的欄位最新生成的值2;繼續向表
中同時新增3條記錄,這時候因為當使用一條INSERT語句插入多個行時,LAST_INSERT_ID只返回插入的第一行資料
時產生的值,在這裡為第3條記錄。之所以這樣,是因為這使依靠其他伺服器複製同樣的INSERT語句變得簡單
TIPS:LAST_INSERT_ID是與table無關的,如果向表a插入資料後,再向表b插入資料,LAST_INSERT_ID返回表b中的ID值
這裡跟SQLSERVER不一樣
使用下面指令碼來測試,無論使用方式一還是方式二,當前的LAST_INSERT_ID都是最後一個值
1 2 3 4 |
CREATE TABLE [dbo].[aaa]( [a] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, [name] [nvarchar](50) NOT NULL ) ON [PRIMARY] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
USE [sss] SELECT * FROM [dbo].[aaa] INSERT INTO [dbo].[aaa] ( [name] ) VALUES ( N'sdfsdf' -- name - nvarchar(50) ) SELECT * FROM [dbo].[aaa] INSERT INTO [dbo].[aaa] ( [name] ) VALUES ( N'sdf969' -- name - nvarchar(50) ),('lkjj96'),('565656') SELECT IDENT_CURRENT('aaa') SELECT * FROM [dbo].[aaa] |
加密函式
1、加密函式PASSWORD(STR)
PASSWORD(STR)從原文密碼str計算並返回加密後的密碼字串,當引數為NULL時,返回NULL
1 |
SELECT PASSWORD('NEWPWD') |
MYSQL將PASSWORD函式加密後的密碼儲存到使用者許可權表中
TIPS:PASSWOR()函式在MYSQL伺服器的鑑定系統中使用;不應將他用在個人應用程式中,PASSWORD()函式加密是單向的(不可逆)
PASSWORD執行密碼加密與UNIX中密碼加密方式不同
2、加密函式MD5(str)
MD5(str)為字串算出一個MD5 128位元校驗和。該值以32位十六進位制數字的二進位制字串形式返回,若引數為NULL,則會返回NULL
1 |
SELECT MD5('123') |
3、加密函式ENCODE(str,pswd_str)
ENCODE(str,pswd_str)使用pswd_str作為密碼,加密str。使用DECODE()解密結果,結果是一個和str長度相同的二進位制字串
1 |
SELECT ENCODE('nihao','123') |
可以看到加密後的結果為亂碼
4、解密函式DECODE(crypt_str,pswd_str)
DECODE(crypt_str,pswd_str)使用pswd_str作為密碼,解密加密字串crypt_str,crypt_str是由ENCODE()返回的字串
1 |
SELECT DECODE(ENCODE('nihao','123'),'123') |
可以看到,解密出來的字串
ENCODE()和DECODE互為反函式
其他函式
1、格式化函式FORMAT(x,n)
FORMAT(x,n)將數字x格式化,並以四捨五入的方式保留小數點後n位,結果以字串的形式返回。
若n為0,則返回結果函式不含小數部分
1 |
SELECT FORMAT(12332.123465,4) |
FORMAT(12332.123465,4)保留4位小數點值,並進行四捨五入,結果為12,332.1235
2、不同進位制的數字轉換的函式
CONV(N,from_base,to_base)函式進行不同進位制數間的轉換。
1 |
SELECT CONV('a',16,2) |
CONV(‘a’,16,2)將十六進位制的a轉換為二進位制表示的數值。
3、IP地址與數字相互轉換的函式
INET_ATON(expr)給出一個作為字串的網路地址的點地址表示,返回一個代表該地址數值的整數。
地址可以是4或8位元地址
INET_NTOA(expr)給定一個數字網路地址(4或8位元),返回作為字串的該地址的點地址表示。
4、加鎖函式和解鎖函式
GET_LOCK(str,timeout)設法使用字串str給定的名字得到一個鎖,超時為timeout秒。
RELEASE_LOCK(str)解開被GET_LOCK()獲取的,用字串str所命名的鎖。
IS_FREE_LOCK(str)檢查名為str的鎖是否可以使用
IS_USED_LOCK(str)檢查名為str的鎖是否正在被使用
5、重複執行指定操作的函式
BENCHMARK(count,expr)函式重複count次執行表示式expr。他可以用於計算MYSQL處理表示式的速度。
結果值通常為0(0只是表示處理過程很快,並不是沒有花費時間)
另一個作用是他可以在MYSQL客戶端內部報告語句執行的時間。
首先,使用PASSWORD函式加密密碼
1 |
SELECT PASSWORD('nihao') |
可以看到PASSWORD()函式執行花費的時間為0.00098秒
下面使用BENCHMARK函式重複執行PASSWORD操作500000次
1 |
SELECT BENCHMARK(500000,PASSWORD('nihao')) |
由此可以看出,使用BENCHMARK執行500000次的時間為0.49690秒,明顯比執行一次的時間延長了。
TIPS:BENCHMARK報告的時間是客戶端經過的時間,而不是在伺服器端的CPU時間,每次執行後報告的時間並不一定是相同的。
6、改變字符集的函式
CONVERT(…using…)帶有USING的CONVERT()函式被用來在不同的字符集之間轉化資料。
1 |
SELECT CHARSET('string'),CHARSET(CONVERT('string' USING latin1)) |
預設為utf8字符集,通過CONVERT()將字串“string”的預設字符集改為latin1
7、改變資料型別的函式
CAST(x,AS type)和CONVERT(x,type)函式將一個型別的值轉換為另一個型別的值,可轉換的type有:
BINARY、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED
在SQLSERVER裡也是使用這兩個函式進行資料型別轉換的~
1 |
SELECT CAST(100 AS CHAR(2)),CONVERT('2013-8-9 12:12:12',TIME) |
可以看到, CAST(100 AS CHAR(2))將整數資料100轉換為帶有2個顯示寬度的字串型別,結果為10
CONVERT(‘2013-8-9 12:12:12’,TIME)將DATETIME型別的值,轉換為TIME型別值,結果為“12:12:12”
總結
這一節簡單介紹了MYSQL裡的一些函式,並且比較了與SQLSERVER的區別
TIPS:
1、MYSQL中,日期時間以字串形式儲存在資料表中,因此可以使用字串函式分別擷取日期時間值的不同部分
2、修改預設的字符集,更改MYSQL預設的字符集,在Windows中,只需要修改my.ini,該檔案在MYSQL安裝目錄下。
修改配置檔案中的default-character-set和character-set-server引數值,將其改為想要的字符集名稱,如:
gbk、gb2312、latin1等,修改完之後,重啟MYSQL服務,即可生效。
如果不確定當前使用的字符集,可以使用下面的SQL語句來檢視當前字符集進行對比
1 |
SHOW VARIABLES LIKE 'character_set_%' |
如有不對的地方,歡迎大家拍磚o(∩_∩)o
2014-7-17函式補充
http://baike.baidu.com/link?url=uwjXFFHv_ZzkloAoUMdSCTJd7xTCZwRw41w885eqwyskXUuH5jmQQPKaLZGE_IoSOmXJqZXbcKnXjB1FtKEt7K
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
控制流程函式 編輯 [1] a) CASE WHEN THEN 函式 語法:CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ……] [ELSE result ]END CASE WHEN [condition] THEN result [WHEN[condition] THEN result ……] [ELSE result] END ; 函式用法說明:在第一個方案中, 當滿足條件value =compare-value 時,返回對應的result,否則返回ELSE後的result。 在第二個方案中,當滿足條件condition時,返回對應的result,否則返回ELSE後的result。 兩種方案中,如果都不滿足而且如果沒有ELSE 部分,則返回值為NULL b) IF 函式用法 語法: IF(expr1,expr2,expr3) 函式用法說明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,則 IF() 的返回值為 expr2 ; 否則返回值則為 expr3 。 IF() 的返回值為數字值或字串值,具體情況視其所在語境而定 c) IFNULL 函式 語法: IFNULL(expr1,expr2) 函式用法說明:假如 expr1 不為 NULL ,則 IFNULL() 的返回值為 expr1 ; 否則其返回值為 expr2 。 IFNULL() 的返回值是數字或是字串,具體情況取決於其所使用的語境 2字串函式 編輯 a) 函式 ascii(str) 函式用法說明:返回值為字串 str 的最左字元的數值。假如 str 為空字串,則返回值為 0 。假如 str 為 NULL ,則返回值為 NULL 。 ASCII() 用於帶有從 0 到 255 的數值的字元 b) 函式 BIN(N) 函式用法說明:返回值為 N 的二進位制值的字串表示,其中 N 為一個 longlong (BIGINT) 數字。這等同於 CONV(N ,10,2) 。假如 N 為 NULL ,則返回值為 NULL 。 c) 函式CHAR(N ,... [USING charset ]) 函式用法說明: CHAR() 將每個引數 N 理解為一個整數,其返回值為一個包含這些整數的程式碼值所給出的字元的字串。 NULL 值被省略。 d) 函式CHAR_LENGTH(str ) 函式使用說明:返回值為字串 str 的長度,長度的單位為字元。一個多位元組字元算作一個單字元。對於一個 包含五個二位元組字符集 , LENGTH() 返回值為 10, 而 CHAR_LENGTH() 的返回值為 5 e) 函式 CHARACTER_LENGTH(str ) 函式使用說明: CHARACTER_LENGTH() 是 CHAR_LENGTH() 的同義詞。 f) 函式 COMPRESS(string_to_compress ) 函式使用說明: COMPRESS( 壓縮一個字串。這個函式要求 MySQL 已經用一個 諸如 zlib 的壓縮庫壓縮過。 否則,返回值始終是 NULL 。 UNCOMPRESS() 可將壓縮過的字串進行解壓縮 ) 。 g) 函式 CONCAT(str1 ,str2 ,...) 函式使用說明:返回結果為連線引數產生的字串。如有任何一個引數為 NULL ,則 返回值為 NULL 。或許有一個或多個引數。 如果所有引數均為非二進位制字串,則結果為非二進位制字串。 如果自變數中含有任一二進位制字串,則結果為一個二進位制字串。一個數字引數被轉化為與之相等的二進位制字串格式;若要避免這種情況,可使用顯式型別 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) h) 函式 CONCAT_WS(separator ,str1 ,str2 ,...) 函式使用說明: CONCAT_WS() 代表 CONCAT With Separator ,是 CONCAT() 的 特殊形式。 第一個引數是其它引數的分隔符。分隔符的位置放在要連線的兩個字串之間。分隔符可以是一個字串,也可以是其它引數。如果分隔符為 NULL ,則結果為 NULL 。函式會忽略任何分隔符引數後的 NULL 值。 i) 函式CONV(N from_base, to_base) 函式使用說明:不同數基間轉換數字。返回值為數字的 N 字串表示,由 from_base 基轉化為 to_base 基。如有任意一個引數為 NULL ,則返回值為 NULL 。自變數 N 被理解為一個整數,但是可以被指定為一個整數或字串。最小基數為 2 ,而最大基數則為 36 。 If to_base 是一個負數,則 N 被看作一個帶符號數。否則, N 被看作無符號數。 CONV() 的執行精確度為 64 位元。 j) 函式 ELT(N ,str1 ,str2 ,str3 ,...) 函式使用說明:若 N = 1 ,則返回值為 str1 ,若 N = 2 ,則返回值為 str2 ,以此 類推。 若 N 小於 1 或大於引數的數目,則返回值為 NULL 。 ELT() 是 FIELD() 的補數 k) 函式 EXPORT_SET(bits ,on ,off [,separator [,number_of_bits ]]) 函式使用說明: 返回值為一個字串,其中對於 bits 值中的每個位組,可以得到 一個 on 字串,而對於每個清零位元位,可以得到一個 off 字串。 bits 中的位元值按照從右到左的順序接受檢驗 ( 由低位位元到高位位元 ) 。字串被分隔字串分開 ( 預設為逗號 ‘,’) ,按照從左到右的順序被新增到結果中。 number_of_bits 會給出被檢驗的二進位制位數 ( 預設為 64) 。 l) 函式 FIELD(str, str1, str2, str3, …...) 函式使用說明:返回值為 str1 , str2 , str3 ,…… 列表中的 str 指數。在找不到 str 的情況下,返回值為 0 。如果所有對於 FIELD() 的引數均為字串,則所有引數均按照字串進行比較。如果所有的引數均為數字,則按照數字進行比較。否則,引數按照雙倍進行比較。如果 str 為 NULL ,則返回值為 0 ,原因是 NULL 不能同任何值進行同等比較。 FIELD() 是 ELT() 的補數。 m) 函式FIND_IN_SET(str, strlist) 函式使用說明: 假如字串 str 在由 N 子鏈組成的字串列表 strlist 中, 則返 回值的範圍在 1 到 N 之間 。一個字串列表就是一個由一些被 ‘,’ 符號分開的自鏈組成的字串。如果第一個引數是一個常數字符串,而第二個是 type SET 列,則 FIND_IN_SET() 函式被優化,使用位元計算。如果 str 不在 strlist 或 strlist 為空字串,則返回值為 0 。如任意一個引數為 NULL ,則返回值為 NULL 。 這個函式在第一個引數包含一個逗號 (‘,’) 時將無法正常執行。 n) 函式 FORMAT(X ,D ) 函式使用說明: 將 number X 設定為格式 '#,###,###.##', 以四捨五入的方式保留到小數點後 D 位 , 而返回結果為一個字串。 o) 函式 HEX(N_or_S ) 函式使用說明:如果N_OR_S 是一個數字,則返回一個 十六進位制值 N 的 字串表示,在這裡, N 是一個longlong (BIGINT) 數。這相當於 CONV(N,10,16) 。如果N_OR_S 是一個字串,則返回值為一個N_OR_S 的十六進位制字串表示,其中每個N_OR_S 裡的每個字元被轉化為兩個十六進位制數字。 p) 函式INSTR(str,substr) 函式使用說明:返回字串 str 中子字串的第一個出現位置。這和LOCATE() 的雙引數形式相同,除非引數的順序被顛倒。 q) 函式LCASE(str) 函式使用說明:LCASE() 是 LOWER() 的同義詞 r) 函式LEFT(str,len) 函式使用說明:返回從字串str 開始的len 最左字元 s) 函式 LENGTH(str ) 函式使用說明: 返回值為字串 str 的長度,單位為位元組。一個多位元組字元算作多位元組。這意味著 對於一個包含 5 個 2 位元組字元的字串, LENGTH() 的返回值為 10, 而 CHAR_LENGTH() 的返回值則為5 。 t) 函式 LOAD_FILE(file_name) 函式使用說明:讀取檔案並將這一檔案按照字串的格式返回。 檔案的位置必須在伺服器上 , 你必須為檔案制定路徑全名,而且你還必須擁有 FILE 特許權。檔案必須可讀取,檔案容量必須小於 max_allowed_packet 位元組。若檔案不存在,或因不滿足上述條件而不能被讀取, 則函式返回值為 NULL u) 函式 LOCATE(substr ,str ) , LOCATE(substr ,str ,pos ) 函式使用說明:第一個語法返回字串 str 中子字串substr 的第一個出現位置。第二個語法返回字串 str 中子字串substr 的第一個出現位置, 起始位置在pos 。如若substr 不在str 中,則返回值為0 。 v) 函式LOWER(str ) 函式使用說明:返回字串 str 以及所有根據最新的字符集對映表變為小寫字母的字元 w) 函式LPAD(str ,len ,padstr ) 函式使用說明:返回字串 str , 其左邊由字串padstr 填補到len 字元長度。假如str 的長度大於len , 則返回值被縮短至 len 字元。 x) 函式LTRIM(str ) 函式使用說明:返回字串 str ,其引導空格字元被刪除。 y) 函式 MAKE_SET(bits ,str1 ,str2 ,...) 函式使用說明: 返回一個設定值 ( 一個包含被 ‘,’ 號分開的字字串的字串 ) ,由在 bits 組中具有相應的位元的字串組成。 str1 對應位元 0, str2 對應位元 1, 以此類推。 str1 , str2 , ... 中的 NULL 值不會被新增到結果中。 z) 函式 MID(str ,pos ,len ) 函式使用說明: MID(str ,pos ,len ) 是 SUBSTRING(str ,pos ,len ) 的同義詞。 aa) 函式 OCT(N ) 函式使用說明:返回一個 N 的八進位制值的字串表示,其中 N 是一個 longlong (BIGINT) 數。這等同於 CONV(N,10,8) 。若 N 為 NULL ,則返回值為 NULL 。 bb) 函式 OCTET_LENGTH(str ) 函式使用說明: OCTET_LENGTH() 是 LENGTH() 的同義詞。 cc) 函式ORD(str ) 函式使用說明:若字串str 的最左字元是一個多位元組字元,則返回該字元的程式碼, 程式碼的計算通過使用以下公式計算其組成位元組的數值而得出: (1st byte code) + (2nd byte code × 256) + (3rd byte code × 2562 ) ... 假如最左字元不是一個多位元組字元,那麼 ORD() 和函式ASCII() 返回相同的值 dd) 函式 POSITION(substr IN str ) 函式使用說明:POSITION(substr IN str ) 是 LOCATE(substr ,str ) 同義詞 ee) 函式QUOTE(str ) 函式使用說明:引證一個字串,由此產生一個在SQL 語句中可用作完全轉義資料值的結果。 返回的字串由單引號標註,每例都帶有單引號 (‘'’) 、 反斜線符號 (‘\’) 、 ASCII NUL 以及前面有反斜線符號的Control-Z 。如果自變數的值為NULL, 則返回不帶單引號的單詞 “NULL” 。 ff) 函式REPEAT(str ,count ) 函式使用說明:返回一個由重複的字串str 組成的字串,字串str 的數目等於count 。 若 count <= 0, 則返回一個空字串。若str 或 count 為 NULL ,則返回 NULL 。 gg) 函式REPLACE(str ,from_str ,to_str ) 函式使用說明:返回字串str 以及所有被字串to_str 替代的字串from_str 。 hh) 函式REVERSE(str ) 函式使用說明:返回字串 str ,順序和字元順序相反。 ii) 函式RIGHT(str ,len ) 函式使用說明:從字串str 開始,返回最右len 字元。 jj) 函式RPAD(str ,len ,padstr ) 函式使用說明:返回字串str , 其右邊被字串 padstr 填補至len 字元長度。假如字串str 的長度大於 len , 則返回值被縮短到與 len 字元相同長度 kk) 函式RTRIM(str ) 函式使用說明:返回字串 str ,結尾空格字元被刪去。 ll) 函式 SOUNDEX(str ) 函式使用說明:從str 返回一個soundex 字串。 兩個具有幾乎同樣探測的字串應該具有同樣的 soundex 字串。一個標準的soundex 字串的長度為4 個字元,然而SOUNDEX() 函式會返回一個人以長度的字串。 可使用結果中的SUBSTRING() 來得到一個標準 soundex 字串。在str 中, 會忽略所有未按照字母順序排列的字元。所有不在A-Z 範圍之內的國際字母符號被視為母音字母。 mm) 函式expr1 SOUNDS LIKE expr2 函式使用說明: 這相當於SOUNDEX(expr1 ) = SOUNDEX(expr2 ) 。 nn) 函式SPACE(N ) 函式使用說明:返回一個由N 間隔符號組成的字串 oo) 函式SUBSTRING(str ,pos ) , SUBSTRING(str FROM pos ) SUBSTRING(str ,pos ,len ) , SUBSTRING(str FROM pos FOR len ) 函式使用說明:不帶有len 引數的格式從字串str 返回一個子字串,起始於位置 pos 。帶有len 引數的格式從字串str 返回一個長度同len 字元相同的子字串,起始於位置 pos 。 使用 FROM 的格式為標準 SQL 語法。也可能對pos 使用一個負值。假若這樣,則子字串的位置起始於字串結尾的pos 字元,而不是字串的開頭位置。在以下格式的函式中可以對pos 使用一個負值。 pp) 函式SUBSTRING_INDEX(str ,delim ,count ) 函式使用說明:在定界符 delim 以及count 出現前,從字串str 返回自字串。若count 為正值, 則返回最終定界符( 從左邊開始) 左邊的一切內容。若count 為負值,則返回定界符(從右邊開始)右邊的一切內容。 qq) 函式 TRIM([{BOTH | LEADING | TRAILING} [remstr ] FROM] str ) TRIM(remstr FROM] str ) 函式使用說明:返回字串 str , 其中所有remstr 字首和/ 或字尾都已被刪除。若分類符BOTH 、LEADIN 或TRAILING 中沒有一個是給定的, 則假設為BOTH 。 remstr 為可選項,在未指定情況下,可刪除空格 rr) 函式UCASE(str) 函式使用說明:UCASE() 是UPPER() 的同義詞 ss) 函式UNCOMPRESS(string_to_uncompress ) 函式使用說明:對經COMPRESS() 函式壓縮後的字串進行解壓縮。若引數為壓縮值,則結果為 NULL 。這個函式要求 MySQL 已被諸如zlib 之類的壓縮庫編譯過。否則, 返回值將始終是 NULL tt) 函式 UNCOMPRESSED_LENGTH(compressed_string ) 函式使用說明: 返回壓縮字串壓縮前的長度。 uu) 函式 UNHEX(str) 函式使用說明:執行從 HEX(str ) 的反向操作。就是說,它將引數中的每一對十六進位制數字理解為一個數字,並將其轉化為該數字代表的字元。結果字元以二進位制字串的形式返回 vv) 函式 UPPER(str ) 函式使用說明:返回字串 str , 以及根據最新字符集對映轉化為大寫字母的字元 3數學函式 編輯 a) 函式 ABS(X) 函式使用說明:返回 X 的絕對值 b) 函式 ACOS(X ) 函式使用說明:返回 X 反餘弦 , 即 , 餘弦是 X 的值。若 X 不在 -1 到 1 的範圍之內,則返回 NULL 。 c) 函式 ASIN ( X ) 函式使用說明:返回X 的反正弦,即,正弦為X 的值。若X 若X 不在-1 到 1 的範圍之內,則返回 NULL 。 d) 函式ATAN(X ) 函式使用說明:返回 X 的反正切,即,正切為 X 的值。 e) 函式 ATAN(Y ,X ) , ATAN2(Y ,X ) 函式使用說明:返回兩個變數 X 及 Y 的反正切。 它類似於 Y 或 X 的反正切計 算 , 除非兩個引數的符號均用於確定結果所在象限。 f) 函式 CEILING(X ) CEIL(X ) 函式使用說明:返回不小於 X 的最小整數值。 g) 函式 COS(X ) 函式使用說明:返回 X 的餘弦,其中 X 在弧度上已知。 h) 函式 COT(X ) 函式使用說明:返回 X 的餘切 i) 函式 CRC32(expr ) 函式使用說明:計算迴圈冗餘碼校驗值並返回一個 32 位元無符號值。若引數為 NULL ,則結果為 NULL 。該引數應為一個字串,而且在不是字串的情況下會被作為字串處理(若有可能) j) 函式 DEGREES(X ) 函式使用說明:返回引數 X , 該引數由弧度被轉化為度。 k) 函式 EXP(X ) 函式使用說明:返回 e 的 X 乘方後的值 ( 自然對數的底 ) 。 l) 函式 FLOOR(X ) 函式使用說明:返回不大於 X 的最大整數值 。 m) 函式 FORMAT(X ,D ) 函式使用說明:將數字 X 的格式寫成 '#,###,###.##' 格式 , 即保留小數點後 D 位,而第 D 位的保留方式為四捨五入,然後將結果以字串的形式返回 n) 函式 LN(X ) 函式使用說明:返回 X 的自然對數 , 即 , X 相對於基數 e 的對數 o) 函式 LOG(X ) LOG(B ,X ) 函式使用說明:若用一個引數呼叫,這個函式就會返回 X 的自然對數。 p) 函式 LOG2(X ) 函式使用說明:返回 X 的基數為 2 的對數。 q) 函式 LOG10(X ) 函式使用說明:返回 X 的基數為 10 的對數。 r) 函式 MOD(N ,M ) , N % M N MOD M 函式使用說明: 模操作。返回 N 被 M 除後的餘數。 s) 函式 PI() 函式使用說明:返回 ϖ (pi) 的值。預設的顯示小數位數是 7 位 , 然而 MySQL 內部會使用完全雙精度值。 t) 函式 POW(X ,Y ) , POWER(X ,Y ) 函式使用說明:返回 X 的 Y 乘方的結果值。 u) 函式 RADIANS(X ) 函式使用說明:返回由度轉化為弧度的引數 X , ( 注意 ϖ 弧度等於 180 度)。 v) 函式 RAND() RAND(N ) 函式使用說明:返回一個隨機浮點值 v ,範圍在 0 到 1 之間 ( 即 , 其範圍為 0 ≤ v ≤ 1.0) 。若已指定一個整數引數 N ,則它被用作種子值,用來產生重複序列。 w) 函式 ROUND(X ) ROUND(X ,D ) 函式使用說明:返回引數 X , 其值接近於最近似的整數。在有兩個引數的情況下,返回 X ,其值保留到小數點後 D 位,而第 D 位的保留方式為四捨五入。若要接保留 X 值小數點左邊的 D 位,可將 D 設為負值。 x) 函式 SIGN(X ) 函式使用說明:返回引數作為 -1 、 0 或 1 的符號,該符號取決於 X 的值為負、零或正。 y) 函式 SIN(X ) 函式使用說明:返回 X 正弦,其中 X 在弧度中被給定。 z) 函式 SQRT(X ) 函式使用說明: 返回非負數 X 的二次方根。 aa) 函式TAN(X ) 函式使用說明: 返回 X 的正切,其中 X 在弧度中被給定。 bb) 函式TRUNCATE(X ,D ) 函式使用說明: 返回被捨去至小數點後 D 位的數字 X 。若 D 的值為 0, 則結果 不帶有小數點或不帶有小數部分。可以將 D 設為負數 , 若要截去 ( 歸零 ) X 小數點左起第 D 位開始後面所有低位的值 4日期時間函式 編輯 a) 函式ADDDATE(date ,INTERVAL expr type ) ADDDATE(expr ,days ) 函式使用說明: 當被第二個引數的 INTERVAL 格式啟用後, ADDDATE() 就是 DATE_ADD() 的同義詞。相關函式 SUBDATE() 則是 DATE_SUB() 的同義詞。對於 INTERVAL 引數上的資訊 ,請參見關於 DATE_ADD() 的論述。 b) 函式 ADDTIME(expr ,expr2 ) 函式使用說明: ADDTIME() 將 expr2 新增至 expr 然後返回結果。 expr 是一個時間或時間日期表示式,而 expr2 是一個時間表示式。 c) 函式 CONVERT_TZ(dt ,from_tz ,to_tz ) 函式使用說明: CONVERT_TZ() 將時間日期值 dt 從 from_tz 給出的時區轉到 to_tz 給出的時區,然後返回結果值。關於可能指定的時區的詳細論述,若自變數無效,則這個函式會返回 NULL d) 函式 CURDATE() 函式使用說明:將當前日期按照 'YYYY-MM-DD' 或 YYYYMMDD 格式的值返回,具體格式根據函式用在字串或是數字語境中而定。 e) 函式 CURRENT_DATE CURRENT_DATE() 函式使用說明: CURRENT_DATE 和 CURRENT_DATE() 是的同義詞 . f) 函式 CURTIME() 函式使用說明: 將當前時間以 'HH:MM:SS' 或 HHMMSS 的格式返回, 具體格式根據函式用在字串或是數字語境中而定。 g) 函式 CURRENT_TIME, CURRENT_TIME() 函式使用說明: CURRENT_TIME 和 CURRENT_TIME() 是 CURTIME() 的同義詞。 h) 函式 CURRENT_TIMESTAMP, CURRENT_TIMESTAMP() 函式使用說明: CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP() 是 NOW() 的同義詞 i) 函式 DATE(expr ) 函式使用說明: 提取日期或時間日期表示式expr 中的日期部分。 j) 函式 DATEDIFF(expr ,expr2 ) 函式使用說明: DATEDIFF() 返回起始時間 expr 和結束時間 expr2 之間的天數。 Expr 和 expr2 為日期或 date-and-time表示式。計算中只用到這些值的日期部分。 k) 函式 DATE_ADD(date ,INTERVAL expr type ) DATE_SUB(date ,INTERVAL expr type ) 函式使用說明:這些函式執行日期運算。 date 是一個 DATETIME 或 DATE 值,用來指定起始時間。 expr 是一個表示式,用來指定從起始日期新增或減去的時間間隔值。 Expr 是一個字串 ; 對於負值的時間間隔,它可以以一個 ‘-’ 開頭。 type 為關鍵詞,它指示了表示式被解釋的方式。 l) 函式 DATE_FORMAT(date ,format ) 函式使用說明:根據 format 字串安排 date 值的格式。 m) 函式 DAY(date ) 函式使用說明: DAY() 和 DAYOFMONTH() 的意義相同 n) 函式 DAYNAME(date ) 函式使用說明:返回 date 對應的工作日名稱。 o) 函式 DAYOFMONTH(date ) 函式使用說明:返回 date 對應的該月日期,範圍是從 1 到 31 p) 函式 DAYOFWEEK(date ) 函式使用說明:返回 date (1 = 週日 , 2 = 週一 , ..., 7 = 週六 ) 對應的工作日索引。這些索引值符合 ODBC 標準 q) 函式 DAYOFYEAR(date ) 函式使用說明:返回date 對應的一年中的天數,範圍是從 1 到366 。 r) 函式 EXTRACT(type FROM date ) 函式使用說明: EXTRACT() 函式所使用的時間間隔型別說明符同 DATE_ADD() 或 DATE_SUB() 的相同 , 但它從日期中提取其部分,而不是執行日期運算。 s) 函式FROM_DAYS(N ) 函式使用說明: 給定一個天數 N , 返回一個 DATE 值。 t) 函式 FROM_UNIXTIME(unix_timestamp ) FROM_UNIXTIME(unix_timestamp ,format ) 函式使用說明:返回'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS 格式值的unix_timestamp 參數列示,具體格式取決於該函式是否用在字串中或是數字語境中。 若format 已經給出,則結果的格式是根據format 字串而定。 format 可以包含同DATE_FORMAT() 函式輸入項列表中相同的說明符。 u) 函式 GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL') 函式使用說明:返回一個格式字串。這個函式在同 DATE_FORMAT() 及 STR_TO_DATE() 函式結合時很有用 v) 函式 HOUR(time ) 函式使用說明:返回 time 對應的小時數。對於日時值的返回值範圍是從 0 到 23 w) 函式 LAST_DAY(date ) 函式使用說明:獲取一個日期或日期時間值,返回該月最後一天對應的值。若引數無效,則返回 NULL 。 x) 函式 LOCALTIME, LOCALTIME() 函式使用說明: LOCALTIME 及 LOCALTIME() 和 NOW() 具有相同意義。 y) 函式 LOCALTIMESTAMP, LOCALTIMESTAMP() 函式使用說明: LOCALTIMESTAMP 和 LOCALTIMESTAMP() 和 NOW() 具有相同意義。 z) 函式 MAKEDATE(year ,dayofyear ) 函式使用說明:給出年份值和一年中的天數值,返回一個日期。 dayofyear 必須大於 0 ,否則結果為 NULL 。 aa) 函式 MAKETIME(hour ,minute ,second ) 函式使用說明: 返回由 hour 、 minute 和 second 引數計算得出的時間值 bb) 函式 CROSECOND(expr ) 函式使用說明:從時間或日期時間表示式expr 返回微秒值,其數字範圍從 0 到 999999 。 cc) 函式 MINUTE(time ) 函式使用說明:返回 time 對應的分鐘數 , 範圍是從 0 到 59 。 dd) 函式 MONTH(date ) 函式使用說明:返回 date 對應的月份,範圍時從 1 到 12 。 ee) 函式 MONTHNAME(date ) 函式使用說明: 返回 date 對應月份的全名 ff) 函式 NOW() 函式使用說明:返回當前日期和時間值,其格式為 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS , 具體格式取決於該函式是否用在字串中或數字語境中。 gg) 函式 PERIOD_ADD(P ,N ) 函式使用說明:新增 N 個月至週期 P ( 格式為 YYMM 或 YYYYMM) ,返回值的格式為 YYYYMM 。注意週期引數 P 不是 日期值。 hh) 函式 PERIOD_DIFF(P1 ,P2 ) 函式使用說明:返回週期 P1 和 P2 之間的月份數。 P1 和 P2 的格式應該為 YYMM 或 YYYYMM 。注意週期引數 P1 和 P2 不是 日期值。 ii) 函式 QUARTER(date ) 函式使用說明:返回 date 對應的一年中的季度值,範圍是從 1 到 4 jj) 函式 SECOND(time ) 函式使用說明:返回 time 對應的秒數 , 範圍是從 0 到 59 。 kk) 函式 SEC_TO_TIME(seconds ) 函式使用說明: 返回被轉化為小時、 分鐘和秒數的 seconds 引數值 , 其格式為 'HH:MM:SS' 或 HHMMSS ,具體格式根據該函式是否用在字串或數字語境中而定 ll) 函式 STR_TO_DATE(str ,format ) 函式使用說明:這是 DATE_FORMAT() 函式的倒轉。它獲取一個字串 str 和一個格式字串 format 。若格式字串包含日期和時間部分,則 STR_TO_DATE() 返回一個 DATETIME 值, 若該字串只包含日期部分或時間部分,則返回一個 DATE 或 TIME 值。 mm) 函式 SUBDATE(date ,INTERVAL expr type ) SUBDATE(expr ,days ) 函式使用說明:當被第二個引數的 INTERVAL 型式呼叫時 , SUBDATE() 和 DATE_SUB() 的意義相同。對於有關 INTERVAL 引數的資訊, 見有關 DATE_ADD() 的討論。 nn) 函式 SUBTIME(expr ,expr2 ) 函式使用說明: SUBTIME() 從 expr 中提取 expr2 ,然後返回結果。 expr 是一個時間或日期時間表示式,而 xpr2 是一個時間表示式。 oo) 函式 SYSDATE() 函式使用說明:返回當前日期和時間值,格式為 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS , 具體格式根據函式是否用在字串或數字語境而定。 pp) 函式 TIME(expr ) 函式使用說明:提取一個時間或日期時間表示式的時間部分,並將其以字串形式返回。 qq) 函式 TIMEDIFF(expr ,expr2 ) 函式使用說明: TIMEDIFF() 返回起始時間 expr 和結束時間 expr2 之間的時間。 expr 和 expr2 為時間或 date-and-time表示式, 兩個的型別必須一樣。 rr) 函式TIMESTAMP(expr ) , TIMESTAMP(expr ,expr2 ) 函式使用說明: 對於一個單引數 , 該函式將日期或日期時間表示式expr 作為日期時間值返回 . 對於兩個引數 , 它將時間表示式 expr2 新增到日期或日期時間表示式 expr 中,將 theresult 作為日期時間值返回。 ss) 函式 TIMESTAMPADD(interval ,int_expr ,datetime_expr ) 函式使用說明:將整型表示式int_expr 新增到日期或日期時間表示式 datetime_expr 中。 int_expr 的單位被時間間隔引數給定,該引數必須是以下值的其中一個: FRAC_SECOND 、SECOND 、 MINUTE 、 HOUR 、 DAY 、 WEEK 、 MONTH 、 QUARTER 或 YEAR 。可使用所顯示的關鍵詞指定Interval 值,或使用SQL_TSI_ 字首。例如, DAY 或SQL_TSI_DAY 都是正確的 tt) 函式 TIMESTAMPDIFF(interval ,datetime_expr1 ,datetime_expr2 ) 函式使用說明:返回日期或日期時間表示式 datetime_expr1 和 datetime_expr2 the 之間的整數差。其結果的單位由 interval 引數給出。 interval 的法定值同 TIMESTAMPADD() 函式說明中所列出的相同。 uu) 函式 TIME_FORMAT(time ,format ) 函式使用說明:其使用和 DATE_FORMAT() 函式相同 , 然而 format 字串可能僅會包含處理小時、分鐘和秒的格式說明符。其它說明符產生一個 NULL 值或 0 。 vv) 函式 TIME_TO_SEC(time ) 函式使用說明:返回已轉化為秒的 time 引數 ww) 函式 TO_DAYS(date ) 函式使用說明:給定一個日期 date , 返回一個天數 ( 從年份 0 開始的天數 ) 。 xx) 函式 UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date ) 函式使用說明:若無引數呼叫,則返回一個 Unix timestamp ('1970-01-01 00:00:00' GMT 之後的秒數 ) 作為無符號整數。若用 date 來呼叫 UNIX_TIMESTAMP() ,它會將引數值以 '1970-01-01 00:00:00' GMT 後的秒數的形式返回。 date 可以是一個 DATE 字串、一個 DATETIME 字串、一個 TIMESTAMP 或一個當地時間的 YYMMDD 或 YYYMMDD 格式的數字。 yy) 函式 UTC_DATE, UTC_DATE() 函式使用說明:返回當前 UTC 日期值,其格式為 'YYYY-MM-DD' 或 YYYYMMDD ,具體格式取決於函式是否用在字串或數字語境中。 zz) 函式 UTC_TIME, UTC_TIME() 函式使用說明:返回當前 UTC 值,其格式為 'HH:MM:SS' 或 HHMMSS ,具體格式根據該函式是否用在字串或數字語境而定。 aaa) 函式 UTC_TIMESTAMP, UTC_TIMESTAMP() 函式使用說明:返回當前 UTC 日期及時間值,格式為 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS ,具體格式根據該函式是否用在字串或數字語境而定 bbb) 函式 WEEK(date [,mode ]) 函式使用說明:該函式返回 date 對應的星期數。 WEEK() 的雙引數形式允許你指定該星期是否起始於週日或週一, 以及返回值的範圍是否為從 0 到 53 或從 1 到 53 。若 mode 引數被省略,則使用 default_week_format 系統自變數的值。 ccc) 函式 WEEKDAY(date ) 函式使用說明:返回 date (0 = 週一 , 1 = 週二 , ... 6 = 週日 ) 對應的工作日索引 weekday index for ddd) 函式 WEEKOFYEAR(date ) 函式使用說明:將該日期的陽曆周以數字形式返回,範圍是從 1 到 53 。它是一個相容度函式,相當於 WEEK(date ,3) 。 eee) 函式 YEAR(date ) 函式使用說明:返回 date 對應的年份 , 範圍是從 1000 到 9999 。 fff) 函式 YEARWEEK(date ), YEARWEEK(date ,start ) 函式使用說明:返回一個日期對應的年或周。 start 引數的工作同 start 引數對 WEEK() 的工作相同。結果中的年份可以和該年的第一週和最後一週對應的日期引數有所不同。 5搜尋函式 編輯 a) 函式 MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION]) 6加密函式 編輯 a) 函式 AES_ENCRYPT(str ,key_str ) , AES_DECRYPT(crypt_str ,key_str ) 函式使用說明:這些函式允許使用官方 AES 進行加密和資料加密 ( 高階加密標準 ) 演算法 , 即以前人們所熟知的 “Rijndael” 。 保密關鍵字的長度為 128 位元,不過你可以通過改變源而將其延長到 256 位元。我們選擇了 128 位元的原因是它的速度要快得多,且對於大多數用途而言這個保密程度已經夠用。 b) 函式DECODE(crypt_str ,pass_str ) 函式使用說明:使用 pass_str 作為密碼,解密加密字串 crypt_str , crypt_str 應該是由 ENCODE() 返回的字串。 c) 函式 ENCODE(str ,pass_str ) 函式使用說明:使用 pass_str 作為密碼,解密 str 。 使用 DECODE() 解密結果。 d) 函式 DES_DECRYPT(crypt_str [,key_str ]) 函式使用說明:使用 DES_ENCRYPT() 加密一個字串。若出現錯誤,這個函式會返回 NULL 。 e) 函式 DES_ENCRYPT(str [,(key_num |key_str )]) 函式使用說明:用 Triple-DES 演算法給出的關鍵字加密字串。若出現錯誤,這個函式會返回 NULL 。 f) 函式 ENCRYPT(str [,salt ]) 函式使用說明:使用 Unix crypt() 系統呼叫加密 str 。 salt 引數應為一個至少包含 2 個字元的字串。若沒有給出 salt 引數,則使用任意值。 g) 函式 MD5(str ) 函式使用說明:為字串算出一個 MD5 128 位元檢查和。該值以 32 位十六進位制數字的二進位制字串的形式返回 , 若引數為 NULL 則會返回 NULL 。例如,返回值可被用作雜湊關鍵字 h) 函式 OLD_PASSWORD(str ) 函式使用說明:當 PASSWORD() 的執行變為改善安全性時, OLD_PASSWORD() 會被新增到 MySQL 。 OLD_PASSWORD() 返回從前的 PASSWORD() 執行值 ( 4.1 之前 ) ,同時允許你為任何 4.1 之前的需要連線到你的 5.1 版本 MySQL 伺服器前客戶端設定密碼,從而不至於將它們切斷 i) 函式PASSWORD(str ) 函式使用說明:從原文密碼str 計算並返回密碼字串,當引數為 NULL 時返回 NULL 。這個函式用於使用者授權表的Password 列中的加密MySQL 密碼儲存 7資訊函式 編輯 a) 函式 BENCHMARK(count ,expr ) 函式使用說明: BENCHMARK() 函式重複 count 次執行表示式 expr 。 它可以被用於計算 MySQL 處理表示式的速度。結果值通常為 0 。另一種用處來自 mysql 客戶端內部 , 能夠報告問詢執行的次數 b) 函式 CHARSET(str ) 函式使用說明:返回字串自變數的字符集。 c) 函式 COERCIBILITY(str ) 函式使用說明:返回字串自變數的整序可壓縮性值。 d) 函式 COLLATION(str ) 函式使用說明:返回惠字串引數的排序方式。 e) 函式 CONNECTION_ID() 函式使用說明:返回對於連線的連線 ID ( 執行緒 ID) 。每個連線都有各自的唯一 ID 。 f) 函式 CURRENT_USER, CURRENT_USER() 函式使用說明:返回當前話路被驗證的使用者名稱和主機名組合。這個值符合確定你的存取許可權的 MySQL 賬戶。在被指定 SQL SECURITY DEFINER 特徵的儲存程式內, CURRENT_USER() 返回程式的建立者 g) 函式 DATABASE() 函式使用說明:返回使用 utf8 字符集的預設 ( 當前 ) 資料庫名。在儲存程式裡,預設資料庫是同該程式向關聯的資料庫,但並不一定與呼叫語境的預設資料庫相同。 h) 函式 FOUND_ROWS() 函式使用說明: A SELECT 語句可能包括一個 LIMIT 子句,用來限制伺服器返回客戶端的行數。在有些情況下,需要不用再次執行該語句而得知在沒有 LIMIT 時到底該語句返回了多少行。為了知道這個行數 , 包括在 SELECT 語句中選擇 SQL_CALC_FOUND_ROWS ,隨後呼叫 FOUND_ROWS() i) 函式 LAST_INSERT_ID() LAST_INSERT_ID(expr ) 函式使用說明:自動返回最後一個 INSERT 或 UPDATE 問詢為 AUTO_INCREMENT 列設定的第一個 發生的值。 j) 函式 ROW_COUNT() 函式使用說明: ROW_COUNT() 返回被前面語句升級的、插入的或刪除的行數。 這個行數和 mysql 客戶端顯示的行數及 mysql_affected_rows() C API 函式返回的值相同。 k) 函式 SCHEMA() 函式使用說明:這個函式和 DATABASE() 具有相同的意義 l) 函式 SESSION_USER() 函式使用說明: SESSION_USER() 和 USER() 具有相同的意義。 m) 函式 SYSTEM_USER() 函式使用說明: SYSTEM_USER() 合 USER() 具有相同的意義 n) 函式 USER() 函式使用說明:返回當前 MySQL 使用者名稱和機主名 o) 函式 VERSION() 函式使用說明:返回指示 MySQL 伺服器版本的字串。這個字串使用 utf8 字符集。 8其他函式 編輯 a) 函式 DEFAULT(col_name ) 函式使用說明:返回一個表列的預設值。若該列沒有預設值則會產生錯誤。 b) 函式 FORMAT(X ,D ) 函式使用說明:將數字 X 的格式寫為 '#,###,###.##', 以四捨五入的方式保留小數點後 D 位, 並將結果以字串的形式返回。若 D 為 0, 則返回結果不帶有小數點,或不含小數部分。 c) 函式 GET_LOCK(str ,timeout ) 函式使用說明:設法使用字串 str 給定的名字得到一個鎖, 超時為 timeout 秒。若成功得到鎖,則返回 1 ,若操作超時則返回 0 ( 例如 , 由於另一個客戶端已提前封鎖了這個名字 ), 若發生錯誤則返回 NULL ( 諸如缺乏記憶或執行緒 mysqladmin kill 被斷開 ) 。假如你有一個用 GET_LOCK() 得到的鎖,當你執行 RELEASE_LOCK() 或你的連線斷開 ( 正常或非正常 ) 時,這個鎖就會解除 d) 函式 INET_ATON(expr ) 函式使用說明:給出一個作為字串的網路地址的點地址表示,返回一個代表該地址數值的整數。地址可以是 4 或 8 位元地址。 e) 函式 INET_NTOA(expr ) 函式使用說明:給定一個數字網路地址 (4 或 8 位元 ), 返回作為字串的該地址的電地址表示 f) 函式 IS_FREE_LOCK(str ) 函式使用說明:檢查名為 str 的鎖是否可以使用 ( 換言之 , 沒有被封鎖 ) 。若鎖可以使用,則返回 1 ( 沒有人在用這個鎖 ), 若這個鎖正在被使用,則返回 0 ,出現錯誤則返回 NULL ( 諸如不正確的引數 ) 。 g) 函式 IS_USED_LOCK(str ) 函式使用說明:檢查名為 str 的鎖是否正在被使用 ( 換言之 , 被封鎖 ) 。若被封鎖,則返回使用該鎖的客戶端的連線識別符號。否則返回 NULL 。 h) 函式 MASTER_POS_WAIT(log_name ,log_pos [,timeout ]) 函式使用說明:該函式對於控制主從同步很有用處。它會持續封鎖,直到從裝置閱讀和應用主機記錄中所有補充資料到指定的位置。返回值是其為到達指定位置而必須等待的記錄事件的數目。若從裝置 SQL 執行緒沒有被啟動、從裝置主機資訊尚未初始化、引數不正確或出現任何錯誤,則該函式返回 NULL 。若超時時間被超過,則返回 -1 。若在 MASTER_POS_WAIT() 等待期間,從裝置 SQL 執行緒中止,則該函式返回 NULL 。若從裝置由指定位置通過,則函式會立即返回結果。 i) 函式 NAME_CONST(name ,value ) 函式使用說明:返回給定值。 當用來產生一個結果集合列時 , NAME_CONST() 促使該列使用給定名稱。 j) 函式 RELEASE_LOCK(str ) 函式使用說明:解開被 GET_LOCK() 獲取的,用字串 str 所命名的鎖。若鎖被解開,則返回 1 ,若改執行緒尚未建立鎖,則返回 0 ( 此時鎖沒有被解開 ), 若命名的鎖不存在,則返回 NULL 。若該鎖從未被對 GET_LOCK() 的呼叫獲取,或鎖已經被提前解開,則該鎖不存在。 k) 函式 SLEEP(duration ) 函式使用說明:睡眠 ( 暫停 ) 時間為 duration 引數給定的秒數,然後返回 0 。若 SLEEP() 被中斷 , 它會返回 1 。 duration 或許或包括一個給定的以微秒為單位的分數部分。 l) 函式 UUID() 函式使用說明:返回一個通用唯一識別符號 (UUID) , UUID 被設計成一個在時間和空間上都獨一無二的數字。 2 個對 UUID() 的呼叫應產生 2 個不同的值,即使這些呼叫的執行是在兩個互不相連的單獨電腦上進行。 m) 函式 VALUES(col_name ) 函式使用說明:在一個 INSERT … ON DUPLICATE KEY UPDATE … 語句中,你可以在 UPDATE 子句中使用 VALUES(col_name ) 函式,用來訪問來自該語句的 INSERT 部分的列值。換言之, UPDATE 子句中的 VALUES(col_name ) 訪問需要被插入的 col_name 的值 , 並不會發生重複鍵衝突。這個函式在多行插入中特別有用。 VALUES() 函式只在 INSERT ... UPDATE 語句中有意義,而在其它情況下只會返回 NULL 9聚合函式 編輯 a) 函式 AVG([DISTINCT] expr ) 函式使用說明:返回 expr 的平均值。 DISTINCT 選項可用於返回 expr 的不同值的平均值。 b) 函式 BIT_AND(expr ) 函式使用說明:返回expr 中所有位元的 bitwise AND 。計算執行的精確度為64 位元(BIGINT) 。若找不到匹配的行,則這個函式返回1844 ( 這是無符號 BIGINT 值,所有位元被設定為 1 )。 c) 函式 BIT_OR(expr ) 函式使用說明:返回expr 中所有位元的bitwise OR 。計算執行的精確度為64 位元(BIGINT) 。若找不到匹配的行,則函式返回 0 。 d) 函式BIT_XOR(expr ) 函式使用說明:返回expr 中所有位元的bitwise XOR 。計算執行的精確度為64 位元(BIGINT) 。若找不到匹配的行,則函式返回 0 。 e) 函式 COUNT(expr ) 函式使用說明:返回SELECT 語句檢索到的行中非NULL 值的數目。若找不到匹配的行,則COUNT() 返回 0 f) 函式 COUNT(DISTINCT expr ,[expr ...]) 函式使用說明:返回不同的非NULL 值數目。若找不到匹配的項,則COUNT(DISTINCT) 返回 0 g) 函式 GROUP_CONCAT(expr ) 函式使用說明:該函式返回帶有來自一個組的連線的非NULL 值的字串結果。其完整的語法如下所示: GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr } [ASC | DESC] [,col_name ...]] [SEPARATOR str_val ]) h) 函式 MIN([DISTINCT] expr ), MAX([DISTINCT] expr ) 函式使用說明:返回 expr 的最小值和最大值。 MIN() 和 MAX() 的取值可以是一個字串引數;在這些情況下, 它們返回最小或最大字串值。 i) 函式 STD(expr ) STDDEV(expr ) 函式使用說明:返回 expr 的總體標準偏差。這是標準 SQL 的延伸。這個函式的 STDDEV() 形式用來提供和 Oracle 的相容性。可使用標準 SQL 函式 STDDEV_POP() 進行代替 j) 函式 STDDEV_POP(expr ) 函式使用說明:返回expr 的總體標準偏差(VAR_POP() 的平方根) 。你也可以使用 STD() 或STDDEV(), 它們具有相同的意義,然而不是標準的 SQL 。若找不到匹配的行,則STDDEV_POP() 返回 NULL k) 函式 STDDEV_SAMP(expr ) 函式使用說明:返回expr 的樣本標準差 ( VAR_SAMP() 的平方根) 。若找不到匹配的行,則STDDEV_SAMP() 返回 NULL l) 函式 SUM([DISTINCT] expr ) 函式使用說明:返回expr 的總數。 若返回集合中無任何行,則 SUM() 返回NULL 。DISTINCT 關鍵詞可用於 MySQL 5.1 中,求得expr 不同值的總和。 若找不到匹配的行,則SUM() 返回 NULL m) 函式 VAR_POP(expr ) 函式使用說明:返回 expr 總體標準方差。它將行視為總體,而不是一個樣本, 所以它將行數作為分母。你也可以使用 VARIANCE(), 它具有相同的意義然而不是 標準的 SQL n) 函式 VAR_SAMP(expr ) 函式使用說明:返回expr 的樣本方差。更確切的說,分母的數字是行數減去1 。若找不到匹配的行,則VAR_SAMP() 返回NULL o) 函式VARIANCE(expr ) 函式使用說明:返回expr 的總體標準方差。這是標準SQL 的延伸。可使用標準SQL 函式 VAR_POP() 進行代替。若找不到匹配的項,則VARIANCE() 返回NULL |