與MSSQL比較進修MYSQL的心得(六)--函數。本站提示廣大學習愛好者:(與MSSQL比較進修MYSQL的心得(六)--函數)文章只能為提供參考,不一定能成為您想要的結果。以下是與MSSQL比較進修MYSQL的心得(六)--函數正文
數學函數
1、求余函數MOD(X,Y)
MOD(X,Y)前往x被y除後的余數,MOD()關於帶有小數部門的數值也起感化,他前往除法運算後的准確余數
SELECT MOD(31,8)
2、四捨五入函數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)直接截取值,其實不停止四捨五入
3、求余函數HEX(X)和UNHEX(X)函數
有以下的代碼可以演示HEX和UNHEX的功效:
SELECT HEX('this is a test str')
查詢的成果為:746869732069732061207465737420737472
SELECT UNHEX('746869732069732061207465737420737472')
查詢的成果為:this is a test str
字符串函數
盤算字符串字符數的函數
1、CHAR_LENGTH(STR)前往值為字符串str所包括的字符個數。一個多字節字符算作一個單字符
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值。
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()類似,不外功效加倍壯大
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字符長度
SELECT RPAD('hello',4,'?')
字符串“hello”長度年夜於4,不須要填充,是以RPAD('hello',4,'?')只前往被延長的長度為4的子串"hell"
6、刪除空格的函數TRIM(S)
TRIM(S)刪除字符串s兩側的空格
MYSQL這裡比SQLSERVER便利,SQLSERVER要刪除雙方的空格,須要應用: SELECT LTRIM(RTRIM(' hello '))
SELECT TRIM(' book ')
刪除指定字符串的函數TRIM(S1 FROM S)
7、TRIM(S1 FROM S)刪除字符串s中兩頭一切的子字符串s1。s1為可選項,在未指定情形下,刪除空格
SELECT TRIM('xy' FROM 'xyxboxyokxxyxy')
'xyxboxyokxxyxy'兩頭的反復字符串“xy”,而中央的“xy”其實不刪除,成果為
xboxyokx
8、反復生成字符串的函數REPEAT(S,N)
這個函數跟SQLSERVER裡的REPLICATE()函數是一樣的,參數個數都是一樣的,這裡不作引見了
9、比擬字符串年夜小的函數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
10、婚配子串開端地位的函數
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
11、前往指定地位的字符串的函數
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
12、前往指定字符串地位的函數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
13、前往子串地位的函數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,...)兩個函數格局分歧,但感化相似,都可以前往指定字符串在字符串列表中的地位
14、拔取字符串的函數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') 前往從左端開端第一和第三個字符串構成的字符串
日期和時光函數
1、獲得以後日期的函數和獲得以後時光的函數
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()
2、獲得月份的函數MONTHNAME(DATE)
MONTHNAME(DATE)函數前往日期date對應月份的英文全名
SELECT MONTHNAME('2013-8-2')
前往8月份的英文
3、獲得季度、分鐘和秒鐘的函數
QUARTER(DATE)前往date對應的一年中的季度值,規模是從1~4
應用QUARTER(DATE)函數前往指定日期對應的季度
SELECT QUARTER('11-04-01')
4月份在第二季度,所以前往2
4、MINUTE(TIME)前往time對應的分鐘數,規模是從0~59
SELECT MINUTE('11-02-03 10:10:06')
前往10分鐘
5、SECOND(time) 前往time對應的秒數,規模是從0~59
SELECT SECOND('10:23:10')
前往10秒
6、獲得日期的指定值的函數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')
7、時光和秒鐘轉換的函數
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)函數互為反函數
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應用上面兩個函數來通殺日期時光盤算的場景
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()的前往值為數字值或字符串值,詳細情形視其地點語境而定
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()的前往值是數字或是字符串,詳細情形視語境而定
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服裝論壇t.vhao.net也有一個相干的帖子,年夜概是由於拼接sql的時刻case 前面的表達式值的數據類型和else前面的表達式值的數據類型紛歧致招致拼接sql掉敗
詳細的帖子地址忘卻了,也找不到,假如找到今後會彌補上
體系信息函數
1、獲得MYSQL版本號、銜接數和數據庫名的函數
VERSION()前往指導MYSQL辦事器版本的字符串。這個字符串應用utf8字符集
SELECT VERSION()
2、CONNECTION_ID()前往MYSQL辦事器以後銜接的次數,每一個銜接都有各自獨一的ID
檢查以後用戶的銜接數
SELECT CONNECTION_ID()
這裡前往1,前往值依據登錄的次數會有分歧。
3、SHOW PROCESSLIST;
4、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語句,是斷定成績語句的一個主要根據。
5、DATABASE()和SCHEMA()函數前往應用utf8字符集的默許(以後)數據庫名
SELECT DATABASE(),SCHEMA()
可以看到,兩個函數的感化雷同
6、獲得用戶名的函數
USER()、CURRENT_USER()、CURRENT_USER、SYSTEM_USER()、SESSION_USER()
這幾個函數前往以後被MYSQL辦事器驗證的用戶名和主機名組合。這個值相符肯定以後登錄用戶
存取權限的MYSQL帳戶。普通情形下,這幾個函數的前往值是雷同的。
SELECT USER(),CURRENT_USER(),SYSTEM_USER()
前往成果指導了以後帳戶銜接辦事器的用戶名和所銜接的客戶主機,root為以後登錄的用戶名,localhost為登錄的主機名
7、獲得字符串的字符集和排序方法的函數
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
8、COLLATION(str)前往字符串str的字符分列方法
SELECT COLLATION(_latin2 'abc'),COLLATION(CONVERT('abc' USING utf8))
可以看到,應用分歧字符集時字符串的分列方法分歧
9、獲得最初一個主動生成的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]
加密函數
1、加密函數PASSWORD(STR)
PASSWORD(STR)從原文暗碼str盤算並前往加密後的暗碼字符串,當參數為NULL時,前往NULL
SELECT PASSWORD('NEWPWD')
MYSQL將PASSWORD函數加密後的暗碼保留到用戶權限表中
TIPS:PASSWOR()函數在MYSQL辦事器的判定體系中應用;不該將他用在小我運用法式中,PASSWORD()函數加密是單向的(弗成逆)
PASSWORD履行暗碼加密與UNIX中暗碼加密方法分歧
2、加密函數MD5(str)
MD5(str)為字符串算出一個MD5 128比特校驗和。該值以32位十六進制數字的二進制字符串情勢前往,若參數為NULL,則會前往NULL
SELECT MD5('123')
3、加密函數ENCODE(str,pswd_str)
ENCODE(str,pswd_str)應用pswd_str作為暗碼,加密str。應用DECODE()解密成果,成果是一個和str長度雷同的二進制字符串
SELECT ENCODE('nihao','123')
可以看到加密後的成果為亂碼
4、解密函數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互為反函數
其他函數
1、格局化函數FORMAT(x,n)
FORMAT(x,n)將數字x格局化,並以四捨五入的方法保存小數點後n位,成果以字符串的情勢前往。
若n為0,則前往成果函數不含小數部門
SELECT FORMAT(12332.123465,4)
FORMAT(12332.123465,4)保存4位小數點值,並停止四捨五入,成果為12,332.1235
2、分歧進制的數字轉換的函數
CONV(N,from_base,to_base)函數停止分歧進制數間的轉換。
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函數加密暗碼
SELECT PASSWORD('nihao')
可以看到PASSWORD()函數履行消費的時光為0.00098秒
上面應用BENCHMARK函數反復履行PASSWORD操作500000次
SELECT BENCHMARK(500000,PASSWORD('nihao'))
由此可以看出,應用BENCHMARK履行500000次的時光為0.49690秒,顯著比履行一次的時光延伸了。
TIPS:BENCHMARK申報的時光是客戶端經由的時光,而不是在辦事器真個CPU時光,每次履行後申報的時光其實不必定是雷同的。
6、轉變字符集的函數
CONVERT(...using...)帶有USING的CONVERT()函數被用來在分歧的字符集之間轉化數據。
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裡也是應用這兩個函數停止數據類型轉換的~
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語句來檢查以後字符集停止比較
SHOW VARIABLES LIKE 'character_set_%'
若有纰謬的處所,迎接年夜家拍磚o(∩_∩)o
掌握流程函數 編纂 [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