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) | 從字符串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 rows in set (0.00sec)
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) | 對字符串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) | 這兩個函數將x變成type類型,這兩個函數只對BINARY,CHAR,DATE,DATETIME,TIME,SIGNED INTEGER,UNSIGNED INTEGER這些類型起作用,但這兩種方法只是改變了輸出值得數據類型,並沒有改變表中字段的類型。 |