mysql資料庫中提供了很豐富的函數。mysql函數包括數學函數、字元串函數、日期和時間函數、條件判斷函數、系統資訊函數、加密函數、格式化函數等。通過這些函數,可以簡化使用者的操作。
簡單介紹幾類函數的使用範圍:
數學函數:這類函數隻要用于處理數字。這類函數包括絕對值函數、正弦函數、餘弦函數、擷取随機數函數等。
字元串函數:這類函數主要用于處理字元串。其中包括字元串連接配接函數、字元串比較函數、将字元串的字母變成小寫或大寫字母的函數、擷取子串的函數等。
日期和時間函數:這類函數主要用于處理日期和時間。其中包括取目前時間的函數、擷取目前日期的函數、傳回年份的函數、傳回日期的函數等。
流程函數:這類函數主要用于在SQL語句中控制條件選擇。其中包括IF語句、CASE語句、WHEN語句等。
系統資訊函數:這類函數主要用于擷取mysql資料庫的系統資訊。其中包括擷取資料庫名的函數、擷取目前使用者的函數、擷取資料庫版本的函數等。
加密函數:這類函數主要用于對字元串進行加密解密。其中包括字元串加密函數、字元串解密函數等。
其他函數:包括格式化函數、鎖函數等。
1.數學函數
函數 | 作用 |
ABS(x) | 傳回x的絕對值 |
CEIL(x),CEILING(x) | 傳回大于或等于x的最小整數(向上取整) |
FLOOR(x) | 傳回小于或等于x的最大整數(向下取整) |
RAND() | 傳回0~1的随機數 |
RAND(x) | 傳回0~1的随機數,x值相同時傳回的随機數相同 |
SIGN(x) | 傳回x的符号,x是負數、0、正數分别傳回-1、0、1 |
PI() | 傳回圓周率 |
TRUNCATE(x,y) | 傳回數值x保留到小數點後y位的值 |
ROUND(x) | 傳回離x最近的整數(四舍五入) |
ROUND(x,y) | 保留x小數點後y位的值,但截斷時要四舍五入 |
POW(x,y),POWER(x,y) | 傳回x的y次方 |
SQRT(x) | 傳回x的平方根 |
EXP(x) | 傳回e的x次方 |
MOD(x,y) | 傳回x 除以y以後的餘數 |
LOG(x) | 傳回自然對數(以e為底的對數) |
LOG10(x) | 傳回以10為底的對數 |
RADIANS(x) | 講角度轉換為弧度 |
DEGREES(x) | 講弧度轉換為角度 |
SIN(x) | 求正弦值 |
ASIN(x) | 求反正弦值 |
COS(x) | 求餘弦值 |
ACOS(x) | 求反餘弦值 |
TAN(x) | 求正切值 |
ATAN(x),ATAN(x,y) | 求反正切值 |
COT(x) | 求餘切值 |
2.字元串函數
CHAR_LENGTH(s) | 傳回字元串s的字元數 |
LENGTH(s) | 傳回字元串s的長度 |
CONCAT(s1,s2,.....) | 将字元串s1,s2等多個字元串合并為一個字元串 |
CONCAT_WS(x,s1,s2,....) | 同COUCAT(s1,s2,.....),但是每個字元串之間要加上x |
INSERT(s1,x,len,s2) | 将字元串s2替換s1的x位置開始長度為len的字元串 |
UPPER(s),UCASE(s) | 講字元串s的所有字元都變成大寫字母 |
LOWER(s),LCASE(s) | 講字元串s的所有字元都變成小寫字母 |
LEFT(s,n) | 傳回字元串s的前n個字元 |
RIGHT(s,n) | 傳回字元串s的後n個字元 |
LPAD(s1,len,s2) | 字元串s2來填充s1的開始處,使字元串長度達到len |
RPAD(s1,len,s2) | 字元串s2來填充s1的結尾處,使字元串長度達到len |
LTRIM(s) | 去掉字元串s開始處的空格 |
RTRIM(s) | 去掉字元串s結尾處的空格 |
TRIM(s) | 去掉字元串s開始處和結尾處的空格 |
TRIM(s1 FROM s) | 去掉字元串s中開始處和結尾處的字元串s1 |
REPEAT(s,n) | 将字元串s重複n次 |
SPACE(n) | 傳回n個空格 |
REPLACE(s,s1,s2) | 用字元串s2代替字元串s中的字元串s1 |
STRCMP(s1,s2) | 比較字元串s1和s2 |
SUBSTRING(s,n,len) | 擷取從字元串s中的第n個位置開始長度為len的字元串 |
MID(s,n,len) | 同SUBSTRING(s,n,len) |
ATE(s1,s),POSTTION(s1 IN s) | 從字元串s中擷取s1的開始位置 |
INSTR(s,s1) | |
REVERSE(s) | 将字元串s的順序反過來 |
ELT(n,s1,s2...) | 傳回第n個字元串 |
FIELD(s,s1,s2...) | 傳回第一個與字元串s比對的字元串的位置 |
FIND_IN_SET(s1,s2) | 傳回在字元串s2中與s1比對的字元串的位置 |
MAKE_SET(x,s1,s2...) | 按x的二進制數從s1,s2......sn中選取字元串 |
3.日期和時間函數
CURDATE(),CURRENT_DATE() | 傳回目前日期 |
CURTIME(),CURRENT_TIME() | 傳回目前時間 |
NOW(),CURRENT_TIMESTAMP() LOCALTIME(),SYSDATE() LOCALTIMESTAMP() | 傳回目前日期和時間 |
UNIX_TIMESTAMP() | 以UNIX時間戳的形式傳回目前時間 |
UNIX_TIMESTAMP(d) | 将時間d以UNIX時間戳的形式傳回 |
FROM_UNIXTIME(d) | 把UNIX時間戳的時間轉換為普通格式的時間 |
UTC_DATE() | 傳回UTC(國際協調時間)日期 |
UTC_TIME() | 傳回UTC時間 |
MONTH(d) | 傳回日期d中的月份值,範圍是1~12 |
MONTHNAME(d) | 傳回日期d中的月份名稱,如january |
DAYNAME(d) | 傳回日期d是星期幾,如Monday |
DAYOFWEEK(d) | 傳回日期d是星期幾,1表示星期日,2表示星期2 |
WEEKDAY(d) | 傳回日期d是星期幾,0表示星期一,1表示星期2 |
WEEK(d) | 計算日期d是本年的第幾個星期,範圍是0-53 |
WEEKOFYEAR(d) | 計算日期d是本年的第幾個星期,範圍是1-53 |
DAYOFYEAR(d) | 計算日期d是本年的第幾天 |
DAYOFMONTH(d) | 計算日期d是本月的第幾天 |
YEAR(d) | 傳回日期d中的年份值 |
QUARTER(d) | 傳回日期d是第幾季度,範圍1-4 |
HOUR(t) | 傳回時間t中的小時值 |
MINUTE(t) | 傳回時間t中的分鐘值 |
SECOND(t) | 傳回時間t中的秒鐘值 |
EXTRACT(type FROM d) | 從日期d中擷取指定的值,type指定傳回的值,如YEAR,HOUR等 |
TIME_TO_SEC(t) | 将時間t轉換為秒 |
SEC_TO_TIME(s) | 将以秒為機關的時間s轉換為時分秒的格式 |
TO_DAYS(d) | 計算日期d到0000年1月1日的天數 |
FROM_DAYS(n) | 計算從0000年1月1日開始n天後的日期 |
DATEDIFF(d1,d2) | 計算日期d1到d2之間相隔的天數 |
ADDDATE(d,n) | 計算開始日期d加上n天的日期 |
ADDDATE(d, INTERVAL expr type) | 計算起始日期d加上一個時間段後的日期 |
SUBDATE(d,n) | 計算起始日期d減去n天的日期 |
SUBDATE(d, INTERVAL expr type) | 計算起始日期d減去一個時間段後的日期 |
ADDTIME(t,n) | 計算起始時間t加上n秒的時間 |
SUBTIME(t,n) | 計算起始時間t減去n秒的時間 |
DATE_FORMAT(d,f) | 按照表達式f的要求顯示日期d |
TIME_FORMAT(t,f) | 按照表達式f的要求顯示時間t |
GET_FORMAT(type,s) | 根據字元串s擷取type類型資料的顯示格式 |
4.條件判斷函數
條件判斷函數用來在SQL語句中進行條件判斷。更加是否滿足判斷條件,SQL語句執行不同的分支。
4.1 IF(expr,v1,v2)函數
IF(expr,v1,v2)函數中,如果表達式expr成立,傳回結果v1,否則,傳回結果v2。
mysql> selectname,if(price>2,'OK','ON') from food;
+--------------+-----------------------+
| name | if(price>2,'OK','ON') |
| 光磊餅幹 | OK |
| 憲政牛奶 | OK |
| 興周果凍 | ON |
| GG咖啡 | OK |
| XX奶糖 | OK |
5 rows in set (0.00sec)
4.2CASE函數
CASEWHEN expr1 THEN v1 [WHEN expr2 THEN v2...][ELSE vn] END
mysql> selectname,case when price =1.5 then 'OK' when price >3.5 then 'on my god' endfrom food;
+--------------+---------------------------------------------------------------------+
| name | case when price =1.5 then 'OK' whenprice >3.5 then 'on my god' end |
| 光磊餅幹 | NULL |
| 憲政牛奶 | NULL |
| 興周果凍 | OK |
| GG咖啡 | on my god |
| XX奶糖 | on my god |
5.系統資訊函數
系統資訊函數用來查詢mysql資料庫的系統資訊。例如查詢資料庫的版本,查詢資料的目前使用者等。
VERSION() | 傳回資料庫的版本号 |
CONNECTION_ID() | 傳回伺服器的連接配接數,也就是到現在為止mysql服務的連接配接次數 |
DATABASE(),SCHEMA() | 傳回目前資料庫名 |
USER() | 傳回目前使用者的名稱 |
CHARSET(str) | 傳回字元串str的字元集 |
COLLATION(str) | 傳回字元串str的字元排列方式 |
LAST_INSERT_ID() | 傳回最後生成的auto_increment值 |
6.加密解密函數
加密函數是mysql中用來對資料進行加密的函數。
PASSWORD(str) | 對字元串str進行加密 |
MD5(str) | |
ENCODE(str,pswd_str) | 使用字元串pswd_str來加密字元串str,加密結果是一個二進制數,必須使用BLOB類型來保持它 |
DECODE(crypt_str,pswd_str) | 解密函數,使用字元串pswd_str來為crypt_str解密 |
7.其他函數
FORMAT(x,n) | 格式化函數,可以講數字x進行格式化,将x保留到小數點後n位,這個過程需要進行四舍五入。 |
ASCII(s) | 傳回字元串s的第一個字元的ASSCII碼 |
BIN(x) | 傳回x的二進制編碼 |
HEX(x) | 傳回x的十六進制編碼 |
OCT(x) | 傳回x的八進制編碼 |
CONV(x,f1,f2) | 将x從f1進制數變成f2進制數 |
INET_ATON(IP) | 将IP位址轉換為數字表示,IP值需要加上引号 |
INET_NTOA(n) | 可以将數字n轉換成IP的形式 |
GET_LOCT(name,time) | 加鎖函數,定義一個名稱為name、持續時間長度為time秒的鎖,如果鎖定成功,傳回1,如果嘗試逾時,傳回0,如果遇到錯誤,傳回NULL. |
RELEASE_LOCK(name) | 解除名稱為name的鎖,如果解鎖成功,傳回1,如果嘗試逾時,傳回0,如果解鎖失敗,傳回NULL。 |
IS_FREE_LOCK(name) | 判斷是否使用名為name的鎖,如果使用,傳回0,否則傳回1. |
CONVERT(s USING cs) | 将字元串s的字元集變成cs |
CAST(x AS type),CONVERT(x,type) |