一、數學函數
數學函數主要用於處理數字,包括整型、浮點數等。
ABS(x)
返回x的絕對值
SELECT ABS(-1) -- 返回1
CEIL(x),CEILING(x)
返回大於或等於x的最小整數
SELECT CEIL(1.5) -- 返回2
FLOOR(x)
返回小於或等於x的最大整數
SELECT FLOOR(1.5) -- 返回1
RAND()
返回0->1的隨機數
SELECT RAND() --0.93099315644334
RAND(x)
返回0->1的隨機數,x值相同時返回的隨機數相同
SELECT RAND(2) --1.5865798029924
PI()
返回圓周率(3.141593)
SELECT PI() --3.141593
TRUNCATE(x,y)
返回數值x保留到小數點後y位的值(與ROUND最大的區別是不會進行四捨五入)
SELECT TRUNCATE(1.23456,3) -- 1.234
ROUND(x,y)
保留x小數點後y位的值,但截斷時要進行四捨五入
SELECT ROUND(1.23456,3) -- 1.235
POW(x,y).POWER(x,y)
返回x的y次方
SELECT POW(2,3) -- 8
SQRT(x)
返回x的平方根
SELECT SQRT(25) -- 5
EXP(x)
返回e的x次方
SELECT EXP(3) -- 20.085536923188
MOD(x,y)
返回x除以y以後的余數
SELECT MOD(5,2) -- 1
二、字符串函數
字符串函數是MySQL中最常用的一類函數,字符串函數主要用於處理表中的字符串。
函數 說明
CHAR_LENGTH(s)
返回字符串s的字符數
SELECT CHAR_LENGTH('你好123') -- 5
CONCAT(s1,s2,...)
將字符串s1,s2等多個字符串合並為一個字符串
SELECT CONCAT('12','34') -- 1234
CONCAT_WS(x,s1,s2,...)
同CONCAT(s1,s2,...)函數,但是每個字符串直接要加上x
SELECT CONCAT_WS('@','12','34') -- 12@34
INSERT(s1,x,len,s2)
將字符串s2替換s1的x位置開始長度為len的字符串
SELECT INSERT('12345',1,3,'abc') -- abc45
UPPER(s),UCAASE(S)
將字符串s的所有字母變成大寫字母
SELECT UPPER('abc') -- ABC
LOWER(s),LCASE(s)
將字符串s的所有字母變成小寫字母
SELECT LOWER('ABC') -- abc
LEFT(s,n)
返回字符串s的前n個字符
SELECT LEFT('abcde',2) -- ab
RIGHT(s,n)
返回字符串s的後n個字符
SELECT RIGHT('abcde',2) -- de
LTRIM(s) 去掉字符串s開始處的空格
RTRIM(s) 去掉字符串s結尾處的空格
TRIM(s) 去掉字符串s開始和結尾處的空格
SELECT TRIM('@' FROM '@@abc@@') -- abc
REPEAT(s,n)
將字符串s重復n次
SELECT REPEAT('ab',3) -- ababab
SPACE(n) 返回n個空格
REPLACE(s,s1,s2)
將字符串s2替代字符串s中的字符串s1
SELECT REPLACE('abca','a','x') --xbcx
STRCMP(s1,s2) 比較字符串s1和s2
SUBSTRING(s,n,len) 獲取從字符串s中的第n個位置開始長度為len的字符串
LOCATE(s1,s),POSITION(s1 IN s)
從字符串s中獲取s1的開始位置
SELECT LOCATE('b', 'abc') -- 2
REVERSE(s)
將字符串s的順序反過來
SELECT REVERSE('abc') -- cba
FIELD(s,s1,s2...)
返回第一個與字符串s匹配的字符串位置
SELECT FIELD('c','a','b','c') -- 3
三、日期時間函數
MySQL的日期和時間函數主要用於處理日期時間。
函數 說明
CURDATE(),CURRENT_DATE()
返回當前日期
SELECT CURDATE()
->2014-12-17
CURTIME(),CURRENT_TIME
返回當前時間
SELECT CURTIME()
->15:59:02
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),
SYSDATE(),LOCALTIMESTAMP()
返回當前日期和時間
SELECT NOW()
->2014-12-17 15:59:02
YEAR(d),
MONTH(d)
DAY(d)
返回日期d中的月份值,1->12
SELECT MONTH('2011-11-11 11:11:11')
->11
MONTHNAME(d)
返回日期當中的月份名稱,如Janyary
SELECT MONTHNAME('2011-11-11 11:11:11')
->November
DAYNAME(d)
返回日期d是星期幾,如Monday,Tuesday
SELECT DAYNAME('2011-11-11 11:11:11')
->Friday
DAYOFWEEK(d)
日期d今天是星期幾,1星期日,2星期一
SELECT DAYOFWEEK('2011-11-11 11:11:11')
->6
WEEKDAY(d)
日期d今天是星期幾,
0表示星期一,1表示星期二
WEEK(d),WEEKOFYEAR(d)
計算日期d是本年的第幾個星期,范圍是0->53
SELECT WEEK('2011-11-11 11:11:11')
->45
DAYOFYEAR(d)
計算日期d是本年的第幾天
SELECT DAYOFYEAR('2011-11-11 11:11:11')
->315
DAYOFMONTH(d)
計算日期d是本月的第幾天
SELECT DAYOFMONTH('2011-11-11 11:11:11')
->11
QUARTER(d)
返回日期d是第幾季節,返回1->4
SELECT QUARTER('2011-11-11 11:11:11')
->4
HOUR(t)
返回t中的小時值
SELECT HOUR('1:2:3')
->1
MINUTE(t)
返回t中的分鐘值
SELECT MINUTE('1:2:3')
->2
SECOND(t)
返回t中的秒鐘值
SELECT SECOND('1:2:3')
->3
四、系統信息函數
系統信息函數用來查詢MySQL數據庫的系統信息。
函數 作用
VERSION()
返回數據庫的版本號
SELECT VERSION()
->5.0.67-community-nt
CONNECTION_ID() 返回服務器的連接數
DATABASE()、SCHEMA 返回當前數據庫名
USER()、SYSTEM_USER()
返回當前用戶
五、加密函數
加密函數是MySQL用來對數據進行加密的函數。
1、PASSWORD(str)
該函數可以對字符串str進行加密,一般情況下,PASSWORD(str)用於給用戶的密碼加密。
SELECT PASSWORD('123')
->*23AE809DDACAF96AF0FD78ED04B6A265E05AA257
2、MD5
MD5(str)函數可以對字符串str進行散列,可以用於一些普通的不需要解密的數據加密。
SELECT md5('123')
->202cb962ac59075b964b07152d234b70
3、ENCODE(str,pswd_str)與DECODE(crypt_str,pswd_str)
ENCODE函數可以使用加密密碼pswd_str來加密字符串str,加密結果是二進制數,需要使用BLOB類型的字段保存。該函數與DECODE是一對,需要同樣的密碼才能夠解密。
SELECT ENCODE('123','xxoo')
->;vx
SELECT DECODE(';vx','xxoo')
->123
insert into login values('lch','alvin',encode('123','xxoo'),'50')
select Name,decode(Password,'xxoo') from login where username='lch'