個人MYSQL學習心得(六) 函數

這一節主要介紹MYSQL裏的函數,MYSQL裏的函數不少,我這裏主要介紹MYSQL裏有而SQLSERVER沒有的函數mysql

數學函數算法

一、求餘函數MOD(X,Y)sql

MOD(X,Y)返回x被y除後的餘數,MOD()對於帶有小數部分的數值也起做用,他返回除法運算後的精確餘數數據庫

SELECT MOD(31,8)

 

二、四捨五入函數TRUNCATE(X,Y)安全

TRUNCATE(X,Y)返回被捨去至小數點後y位的數字x。若y的值爲0,則結果不帶有小數點或不帶有小數部分。服務器

若y設爲負數,則截去(歸零)x小數點左邊起第y位開始後面全部低位的值。網絡

SELECT TRUNCATE(1.32,1)

TRUNCATE(1.32,1)保留小數點後一位數字,返回值爲1.3函數

TIPS:ROUND(X,Y)函數在截取值的時候會四捨五入,而TRUNCATE(x,y)直接截取值,並不進行四捨五入測試

 

三、求餘函數HEX(X)和UNHEX(X)函數優化

有如下的代碼能夠演示HEX和UNHEX的功能:

SELECT HEX('this is a test str')

查詢的結果爲:746869732069732061207465737420737472 

SELECT UNHEX('746869732069732061207465737420737472')

查詢的結果爲:this is a test str


字符串函數

計算字符串字符數的函數

一、CHAR_LENGTH(STR)返回值爲字符串str所包含的字符個數。一個多字節字符算做一個單字符

SELECT CHAR_LENGTH('DATE')

 

二、合併字符串函數CONCAT_WS(x,s1,s2,......)

CONCAT_WS(x,s1,s2,......),CONCAT_WS表明CONCAT with Separator,是CONCAT()函數的特殊形式。

第一個參數x是其餘參數的分隔符,分隔符的位置放在要鏈接的兩個字符串之間。分隔符能夠是一個字符串,也能夠是

其餘參數。若是分隔符爲NULL,則結果爲NULL。函數會忽略任何分隔符參數後的NULL值。

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,因此第二個值不會出如今結果裏

 

 

三、替換字符串的函數INSERT(S1,X,LEN,S2)

INSERT(S1,X,LEN,S2)函數跟SQLSERVER裏的STUFF()函數的功能是同樣的,這裏不做介紹了

 

 

四、填充字符串的函數LPAD(S1,LEN,S2)和RPAD(S1,LEN,S2)

LPAD(S1,LEN,S2)返回字符串s1,其左邊由字符串s2填補到len字符串長度。假如s1的長度大於len,則返回值被縮短至len字符。

LPAD()函數和RPAD()函數功能跟SQLSERVER裏的 REPLACE()類似,不過功能更增強大

SELECT LPAD('hello',4,'??'),LPAD('hello',10,'??')

字符串「hello」長度大於4,不須要填充,所以LPAD('hello',4,'??')只返回被縮短的長度爲4的子串

字符串「hello」長度小於10,LPAD('hello',10,'??')返回結果爲「?????hello」,左側填充「?」,長度爲10

 

 

五、RPAD(S1,LEN,S2)返回字符串s1,其右邊被字符串s2填補至len字符長度。假如字符串s1的長度大於len,則返回值被縮短到len字符長度

SELECT RPAD('hello',4,'?')

 字符串「hello」長度大於4,不須要填充,所以RPAD('hello',4,'?')只返回被縮短的長度爲4的子串"hell"

 

 

六、刪除空格的函數TRIM(S)

TRIM(S)刪除字符串s兩側的空格

MYSQL這裏比SQLSERVER方便,SQLSERVER要刪除兩邊的空格,須要使用: SELECT LTRIM(RTRIM(' hello ')) 

SELECT TRIM(' book ')

 

刪除指定字符串的函數TRIM(S1 FROM S)

 

七、TRIM(S1 FROM S)刪除字符串s中兩端全部的子字符串s1。s1爲可選項,在未指定狀況下,刪除空格

SELECT TRIM('xy' FROM 'xyxboxyokxxyxy')

 

 'xyxboxyokxxyxy'兩端的重複字符串「xy」,而中間的「xy」並不刪除,結果爲

xboxyokx

 

 

八、重複生成字符串的函數REPEAT(S,N)

這個函數跟SQLSERVER裏的REPLICATE()函數是同樣的,參數個數都是同樣的,這裏不做介紹了

 

 

九、比較字符串大小的函數STRCMP(S1,S2)

STRCMP(S1,S2)若全部的字符串均相同,則返回0;若根據當前分類次序,第一個參數小於第二個,則返回-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

 

 

十、匹配子串開始位置的函數

LOCATE(STR1,STR)、POSITION(STR1 IN STR)、INSTR(STR,STR1)3個函數做用相同,返回子字符串str1在字符串str中的開始位置

這三個函數跟SQLSERVER裏的CHARINDEX()函數功能相似

SELECT LOCATE('ball','football'),POSITION('ball' IN 'football') ,INSTR('football','ball')

子字符串「ball」在字符串「football」中從第5個字母位置開始,所以3個函數返回結果都爲5

 

 

十一、返回指定位置的字符串的函數

ELT(N,字符串1,字符串2,字符串3,...,),若N=1,則返回值爲字符串1,若N=2,則返回值爲字符串2,以此類推。

若N小於1或大於參數的數目,則返回值爲NULL

SELECT ELT(3,'1st','2nd','3rd'),ELT(3,'net','os')

由結果能夠看到,ELT(3,'1st','2nd','3rd')返回第3個位置的字符串「3rd」;指定返回字符串位置超出參數個數,返回NULL

 

 

十二、返回指定字符串位置的函數FIELD(S,S1,S2,...)

FIELD(S,S1,S2,...)返回字符串s在列表s1,s2,......中第一次出現的位置,在找不到s的狀況下,返回值爲0。

若是s爲NULL,則返回值爲0,緣由是NULL不能同任何值進行同等比較。

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

 

 

1三、返回子串位置的函數FIND_IN_SET(S1,S2)

FIND_IN_SET(S1,S2)返回字符串s1在字符串列表s2中出現的位置,字符串列表是一個由多個逗號

‘,’分開的字符串組成的列表。若是s1不在s2或s2爲空字符串,則返回值爲0。若是任意一個參數爲NULL,則返回值爲NULL。

這個函數在第一個參數包含一個逗號‘,’時將沒法正常運行。

SELECT FIND_IN_SET('hi','hihi,hey,hi,bas')

雖然FIND_IN_SET(S1,S2)和FIELD(S,S1,S2,...)兩個函數格式不一樣,但做用相似,均可以返回指定字符串在字符串列表中的位置

 

1四、選取字符串的函數MAKE_SET(X,S1,S2,...)

MAKE_SET(X,S1,S2,...)返回由x的二進制數指定的相應位的字符串組成的字符串,s1對應比特1,s2對應比特01以此類推。

s1,s2...中的NULL值不會被添加到結果中。

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') 返回從左端開始第一和第三個字符串組成的字符串

 


日期和時間函數

一、獲取當前日期的函數和獲取當前時間的函數

CURDATE()、CURRENT_DATE()、CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE()

以上函數都是返回當前日期和時間值,MYSQL的函數數量的確比SQLSERVER多不少,SQLSERVER獲取當前時間和日期用的

函數是: SELECT GETDATE() 

SELECT NOW()

 

返回UTC日期的函數和返回UTC時間的函數

MYSQL裏返回UTC日期和時間是分開的,而SQLSERVER裏是一塊兒的

SELECT GETUTCDATE()

 

MYSQL

SELECT UTC_DATE(),UTC_TIME()

 

二、獲取月份的函數MONTHNAME(DATE)

MONTHNAME(DATE)函數返回日期date對應月份的英文全名

SELECT MONTHNAME('2013-8-2')

返回8月份的英文

 

三、獲取季度、分鐘和秒鐘的函數

QUARTER(DATE)返回date對應的一年中的季度值,範圍是從1~4

使用QUARTER(DATE)函數返回指定日期對應的季度

SELECT QUARTER('11-04-01')

 

4月份在第二季度,因此返回2

 

四、MINUTE(TIME)返回time對應的分鐘數,範圍是從0~59

SELECT MINUTE('11-02-03 10:10:06')

返回10分鐘

 

五、SECOND(time) 返回time對應的秒數,範圍是從0~59

SELECT SECOND('10:23:10')

返回10秒

 

六、獲取日期的指定值的函數EXTRACT(type FROM date)

EXTRACT(type FROM date)這個函數跟SQLSERVER裏的DATEPART()函數是同樣的

獲取日期中的年份

SQLSERVER

SELECT DATEPART(YEAR,'2013-2-3')

 

MYSQL

SELECT EXTRACT(YEAR FROM '2013-2-3')

 

 

七、時間和秒鐘轉換的函數

TIME_TO_SEC(time)返回已轉化爲秒的time參數,轉換公式爲:小時*3600+分鐘*60+秒

SELECT TIME_TO_SEC('23:22:00')

 

SEC_TO_TIME(second)函數能夠將秒轉換爲小時、分鐘和秒數的second參數值

SELECT SEC_TO_TIME('84120')

 

SEC_TO_TIME(second)函數和TIME_TO_SEC(time)函數互爲反函數

 

八、計算日期和時間的函數

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利用下面兩個函數來通殺日期時間計算的場景

SELECT DATEADD(),DATEDIFF()

條件判斷函數

條件判斷函數也稱爲流程控制函數,根據知足的條件的不一樣,執行相應的流程。

MYSQL中進行條件判斷的函數有IF、IFNULL、CASE

雖然SQLSERVER裏也有IF和CASE,不過MYSQL裏的IF語句的語法跟SQLERVER有很大出入

 

一、IF(expr,v1,v2)函數

IF(expr,v1,v2)若是表達式expr是TRUE(expr<>0 and expr<>NULL),則IF()的返回值爲v1;

不然返回值爲v2。IF()的返回值爲數字值或字符串值,具體狀況視其所在語境而定

SELECT IF(1>2,2,3)

1>2的結果爲FALSE,IF(1>2,2,3)返回第二個表達式的值3。

 

TIPS:若是v1或v2中只有一個明確是NULL,則IF()函數的結果類型爲非NULL表達式的結果類型。

 

二、IFNULL(V1,V2)函數

IFNULL(V1,V2)假如v1不爲NULL,則IFNULL(V1,V2)的返回值爲v1;不然其返回值爲v2。

IFNULL()的返回值是數字或是字符串,具體狀況視語境而定

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的類型要一致 

 

三、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失敗

具體的帖子地址忘記了,也找不到,若是找到之後會補充上


系統信息函數

一、獲取MYSQL版本號、鏈接數和數據庫名的函數

VERSION()返回指示MYSQL服務器版本的字符串。這個字符串使用utf8字符集

SELECT VERSION()

 

二、CONNECTION_ID()返回MYSQL服務器當前鏈接的次數,每一個鏈接都有各自惟一的ID

查看當前用戶的鏈接數

SELECT CONNECTION_ID()

這裏返回1,返回值根據登陸的次數會有不一樣。

 

三、SHOW PROCESSLIST;

四、SHOW FULL PROCESSLIST;

processlist命令的輸出結果顯示了有哪些線程在運行,不只能夠查看當前全部的鏈接數,還能夠查看當前的鏈接狀態

幫助識別出有問題的查詢語句等。

 

若是是root賬號,能看到全部用戶的當前鏈接。若是是其餘普通賬號,則只能看到本身佔用的鏈接。showprocesslist只能列出當前100條

若是想所有列出,可使用SHOW FULL PROCESSLIST命令

SHOW PROCESSLIST
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語句,是判斷問題語句的一個重要依據。

 

五、DATABASE()和SCHEMA()函數返回使用utf8字符集的默認(當前)數據庫名

SELECT DATABASE(),SCHEMA()

能夠看到,兩個函數的做用相同

 

六、獲取用戶名的函數

USER()、CURRENT_USER()、CURRENT_USER、SYSTEM_USER()、SESSION_USER()

這幾個函數返回當前被MYSQL服務器驗證的用戶名和主機名組合。這個值符合肯定當前登陸用戶

存取權限的MYSQL賬戶。通常狀況下,這幾個函數的返回值是相同的。

SELECT    USER(),CURRENT_USER(),SYSTEM_USER()

返回結果指示了當前賬戶鏈接服務器的用戶名以及所鏈接的客戶主機,root爲當前登陸的用戶名,localhost爲登陸的主機名

 

七、獲取字符串的字符集和排序方式的函數

CHARSET(STR)返回字符串str自變量的字符集

SELECT    CHARSET('abc') ,CHARSET(CONVERT('abc' USING latin1)),CHARSET(VERSION())

CHARSET('abc')返回系統默認的字符集utf8;

CHARSET(CONVERT('abc' USING latin1))返回的字符集爲latin1;

VERSION()返回的字符串使用utf8字符集,所以CHARSET返回結果爲utf8

 

八、COLLATION(str)返回字符串str的字符排列方式

SELECT    COLLATION(_latin2 'abc'),COLLATION(CONVERT('abc' USING utf8))

能夠看到,使用不一樣字符集時字符串的排列方式不一樣

 

九、獲取最後一個自動生成的ID值的函數

LAST_INSERT_ID()自動返回最後一個INSERT或UPDATE爲AUTO_INCREMENT列設置的第一個發生的值

 

(1)一次插入一條記錄

首先建立表worker,其ID字段帶有AUTO_INCREMENT約束

CREATE TABLE worker(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
NAME VARCHAR(30)
)

分別單獨向表worker插入2條記錄

INSERT INTO worker VALUES(NULL,'jimmy');INSERT INTO worker VALUES(NULL,'tom')SELECT * FROM worker

查看已經插入的數據能夠發現,最後一條插入的記錄的ID字段值爲2,使用LAST_INSERT_ID()查看最後自動生成的ID值

SELECT LAST_INSERT_ID()

 

 能夠看到,一次插入一條記錄時,返回值爲最後一條插入記錄的ID值

(2)一次同時插入多條記錄

 接下來,向表中插入多條記錄

INSERT INTO worker VALUES(NULL,'kevin'),(NULL,'michal'),(NULL,'nick')

查詢已經插入的記錄

SELECT * FROM worker

能夠看到最後一條記錄的ID字段值爲5,使用LAST_INSERT_ID()查看最後自動生成的ID值

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都是最後一個值

CREATE TABLE [dbo].[aaa](    [a] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,    [name] [nvarchar](50) NOT NULL) ON [PRIMARY]

 

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]


加密函數

一、加密函數PASSWORD(STR)

PASSWORD(STR)從原文密碼str計算並返回加密後的密碼字符串,當參數爲NULL時,返回NULL

SELECT PASSWORD('NEWPWD')

MYSQL將PASSWORD函數加密後的密碼保存到用戶權限表中

TIPS:PASSWOR()函數在MYSQL服務器的鑑定系統中使用;不該將他用在我的應用程序中,PASSWORD()函數加密是單向的(不可逆)

PASSWORD執行密碼加密與UNIX中密碼加密方式不一樣

 

 

二、加密函數MD5(str)

MD5(str)爲字符串算出一個MD5 128比特校驗和。該值以32位十六進制數字的二進制字符串形式返回,若參數爲NULL,則會返回NULL

SELECT MD5('123')

 

三、加密函數ENCODE(str,pswd_str)

ENCODE(str,pswd_str)使用pswd_str做爲密碼,加密str。使用DECODE()解密結果,結果是一個和str長度相同的二進制字符串

SELECT ENCODE('nihao','123')

能夠看到加密後的結果爲亂碼

 

 四、解密函數DECODE(crypt_str,pswd_str)

 DECODE(crypt_str,pswd_str)使用pswd_str做爲密碼,解密加密字符串crypt_str,crypt_str是由ENCODE()返回的字符串

SELECT DECODE(ENCODE('nihao','123'),'123')

能夠看到,解密出來的字符串

ENCODE()和DECODE互爲反函數


其餘函數

一、格式化函數FORMAT(x,n)

FORMAT(x,n)將數字x格式化,並以四捨五入的方式保留小數點後n位,結果以字符串的形式返回。

若n爲0,則返回結果函數不含小數部分

SELECT FORMAT(12332.123465,4)

FORMAT(12332.123465,4)保留4位小數點值,並進行四捨五入,結果爲12,332.1235

 

二、不一樣進制的數字轉換的函數

CONV(N,from_base,to_base)函數進行不一樣進制數間的轉換。

SELECT CONV('a',16,2)

 CONV('a',16,2)將十六進制的a轉換爲二進制表示的數值。

 

三、IP地址與數字相互轉換的函數

INET_ATON(expr)給出一個做爲字符串的網絡地址的點地址表示,返回一個表明該地址數值的整數。

地址能夠是4或8比特意址

 

INET_NTOA(expr)給定一個數字網絡地址(4或8比特),返回做爲字符串的該地址的點地址表示。

 

四、加鎖函數和解鎖函數

GET_LOCK(str,timeout)設法使用字符串str給定的名字獲得一個鎖,超時爲timeout秒。

RELEASE_LOCK(str)解開被GET_LOCK()獲取的,用字符串str所命名的鎖。

IS_FREE_LOCK(str)檢查名爲str的鎖是否可使用

IS_USED_LOCK(str)檢查名爲str的鎖是否正在被使用

 

 

五、重複執行指定操做的函數

BENCHMARK(count,expr)函數重複count次執行表達式expr。他能夠用於計算MYSQL處理表達式的速度。

結果值一般爲0(0只是表示處理過程很快,並非沒有花費時間)

另外一個做用是他能夠在MYSQL客戶端內部報告語句執行的時間。

首先,使用PASSWORD函數加密密碼

SELECT PASSWORD('nihao')

能夠看到PASSWORD()函數執行花費的時間爲0.00098秒

下面使用BENCHMARK函數重複執行PASSWORD操做500000次

SELECT BENCHMARK(500000,PASSWORD('nihao'))

由此能夠看出,使用BENCHMARK執行500000次的時間爲0.49690秒,明顯比執行一次的時間延長了。

 

TIPS:BENCHMARK報告的時間是客戶端通過的時間,而不是在服務器端的CPU時間,每次執行後報告的時間並不必定是相同的。

 

六、改變字符集的函數

CONVERT(...using...)帶有USING的CONVERT()函數被用來在不一樣的字符集之間轉化數據。

SELECT  CHARSET('string'),CHARSET(CONVERT('string' USING latin1))

默認爲utf8字符集,經過CONVERT()將字符串「string」的默認字符集改成latin1

 

七、改變數據類型的函數

CAST(x,AS type)和CONVERT(x,type)函數將一個類型的值轉換爲另外一個類型的值,可轉換的type有:

BINARY、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED

在SQLSERVER裏也是使用這兩個函數進行數據類型轉換的~

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:

一、MYSQL中,日期時間以字符串形式存儲在數據表中,所以可使用字符串函數分別截取日期時間值的不一樣部分

二、修改默認的字符集,更改MYSQL默認的字符集,在Windows中,只須要修改my.ini,該文件在MYSQL安裝目錄下。

修改配置文件中的default-character-set和character-set-server參數值,將其改成想要的字符集名稱,如:

gbk、gb23十二、latin1等,修改完以後,重啓MYSQL服務,便可生效。

若是不肯定當前使用的字符集,可使用下面的SQL語句來查看當前字符集進行對比

SHOW VARIABLES LIKE 'character_set_%'

 

若有不對的地方,歡迎你們拍磚o(∩_∩)o 

 

2014-7-17函數補充

http://baike.baidu.com/link?url=uwjXFFHv_ZzkloAoUMdSCTJd7xTCZwRw41w885eqwyskXUuH5jmQQPKaLZGE_IoSOmXJqZXbcKnXjB1FtKEt7K

控制流程函數
編輯[1] a) CASE WHEN THEN 函數
語法:CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ……] [ELSE result ]ENDCASE 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() 的返回值爲 5e) 函數 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 字節。若文件不存在,或因不知足上述條件而不能被讀取, 則函數返回值爲 NULLu) 函數 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
相關文章
相關標籤/搜索