天天看點

mysql内置函數

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)

繼續閱讀