MySQL常用的系統函數


 

MySQL常用的系統函數

 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/pan_junbiao/article/details/86511477

MySQL函數是MySQL數據庫提供的內置函數。這些內置函數可以幫助用戶更加方便地處理表中的數據。MySQL的內置函數可以對表中數據進行相應的處理,以便得到用戶希望得到的數據。有了這些內置函數可以使MySQL數據庫的功能更加強大。

1、數學函數

數學函數是MySQL中常用的一類函數。其主要用於處理數字,包括整型和浮點數等等。

函數 說明
ABS(X) 返回X的絕對值。
FLOOR(X) 返回不大於X的最大整數。
CEIL(X)、CEILING(X) 返回不小於X的最小整數。
TRUNCATE(X,D) 返回數值X保留到小數點后D位的值,截斷時不進行四舍五入。
ROUND(X) 返回離X最近的整數,截斷時要進行四舍五入。
ROUND(X,D) 保留X小數點后D位的值,截斷時要進行四舍五入。
RAND() 返回0~1的隨機數。
SIGN(X) 返回X的符號(負數,零或正)對應-1,0或1。
PI() 返回圓周率的值。默認的顯示小數位數是7位。
POW(x,y)、POWER(x,y) 返回x的y次乘方的值。
SQRT(x) 返回非負數的x的二次方根。
EXP(x) 返回e的x乘方后的值。
MOD(N,M) 返回N除以M以后的余數。
LOG(x) 返回x的自然對數,x相對於基數2的對數。
LOG10(x) 返回x的基數為10的對數。
RADIANS(x) 返回x由角度轉化為弧度的值。
DEGREES(x) 返回x由弧度轉化為角度的值。
SIN(x)、ASIN(x) 前者返回x的正弦,其中x為給定的弧度值;后者返回x的反正弦值,x為正弦。
COS(x)、ACOS(x) 前者返回x的余弦,其中x為給定的弧度值;后者返回x的反余弦值,x為余弦。
TAN(x)、ATAN(x) 前者返回x的正切,其中x為給定的弧度值;后者返回x的反正切值,x為正切。
COT(x) 返回給定弧度值x的余切。

1.1 ABS(X)函數

返回X的絕對值。

  1.  
    SELECT ABS(8); -- 輸出結果:8
  2.  
    SELECT ABS(-8); -- 輸出結果:8

1.2 FLOOR(X)函數

返回不大於X的最大整數。

  1.  
    SELECT FLOOR(1.3); -- 輸出結果:1
  2.  
    SELECT FLOOR(1.8); -- 輸出結果:1

1.3 CEIL(X)、CEILING(X)函數

返回不小於X的最小整數。

  1.  
    SELECT CEIL(1.3); -- 輸出結果:2
  2.  
    SELECT CEILING(1.8); -- 輸出結果:2

1.4 TRUNCATE(X,D)函數

返回數值X保留到小數點后D位的值,截斷時不進行四舍五入。

SELECT TRUNCATE(1.2328,3); -- 輸出結果:1.232 

1.5 ROUND(X)函數

返回離X最近的整數,截斷時要進行四舍五入。

  1.  
    SELECT ROUND(1.3); -- 輸出結果:1
  2.  
    SELECT ROUND(1.8); -- 輸出結果:2

1.6 ROUND(X,D)函數

保留X小數點后D位的值,截斷時要進行四舍五入。

  1.  
    SELECT ROUND(1.2323,3); -- 輸出結果:1.232
  2.  
    SELECT ROUND(1.2328,3); -- 輸出結果:1.233

1.7 RAND()函數

返回0~1的隨機數。

SELECT RAND(); -- 輸出結果:0.6198285246452583

1.8 SIGN(X)函數

返回X的符號(負數,零或正)對應-1,0或1。

  1.  
    SELECT SIGN(-8); -- 輸出結果:-1
  2.  
    SELECT SIGN(0); -- 輸出結果:0
  3.  
    SELECT SIGN(8); -- 輸出結果:1

1.9 MOD(N,M)函數

返回N除以M以后的余數。

  1.  
    SELECT MOD(8,2); -- 輸出結果:0
  2.  
    SELECT MOD(9,2); -- 輸出結果:1

 

2、字符串函數

字符串函數是MySQL中最常用的一類函數。字符串函數主要用於處理表中的字符串。

函數 說明
CHAR_LENGTH(str) 計算字符串字符個數。
LENGTH(str)

返回值為字符串str的長度,單位為字節。

CONCAT(s1,s2,...) 返回連接參數產生的字符串,一個或多個待拼接的內容,任意一個為NULL則返回值為NULL。
CONCAT_WS(x,s1,s2,...) 返回多個字符串拼接之后的字符串,每個字符串之間有一個x。
INSERT(s1,x,len,s2) 返回字符串s1,其子字符串起始於位置x,被字符串s2取代len個字符。
LOWER(str)、LCASE(str) 將str中的字母全部轉換成小寫。
UPPER(str)、UCASE(str) 將字符串中的字母全部轉換成大寫。
LEFT(s,n)、RIGHT(s,n) 前者返回字符串s從最左邊開始的n個字符,后者返回字符串s從最右邊開始的n個字符。
LPAD(s1,len,s2)、RPAD(s1,len,s2) 前者返回s1,其左邊由字符串s2填補到len字符長度,假如s1的長度大於len,則返回值被縮短至len字符;前者返回s1,其右邊由字符串s2填補到len字符長度,假如s1的長度大於len,則返回值被縮短至len字符。
LTRIM(s)、RTRIM(s) 前者返回字符串s,其左邊所有空格被刪除;后者返回字符串s,其右邊所有空格被刪除。
TRIM(s) 返回字符串s刪除了兩邊空格之后的字符串。
TRIM(s1 FROM s) 刪除字符串s兩端所有子字符串s1,未指定s1的情況下則默認刪除空格。
REPEAT(s,n) 返回一個由重復字符串s組成的字符串,字符串s的數目等於n。
SPACE(n) 返回一個由n個空格組成的字符串。
REPLACE(s,s1,s2) 返回一個字符串,用字符串s2替代字符串s中所有的字符串s1。
STRCMP(s1,s2) 若s1和s2中所有的字符串都相同,則返回0;根據當前分類次序,第一個參數小於第二個則返回-1,其他情況返回1。
SUBSTRING(s,n,len)、MID(s,n,len) 兩個函數作用相同,從字符串s中返回一個第n個字符開始、長度為len的字符串。
LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1) 三個函數作用相同,返回子字符串str1在字符串str中的開始位置(從第幾個字符開始)。
REVERSE(s) 將字符串s反轉。
ELT(N,str1,str2,str3,str4,...) 返回第N個字符串。
FIELD(s,s1,s2,...) 返回第一個與字符串s匹配的字符串的位置。
FIND_IN_SET(s1,s2) 返回在字符串s2中與s1匹配的字符串的位置。
MAKE_SET(x,s1,s2,...) 按x的二進制數從s1,s2...,sn中選取字符串

2 CHAR_LENGTH(str)函數

計算字符串字符個數。

  1.  
    SELECT CHAR_LENGTH('pan_junbiao的博客'); -- 輸出結果:14
  2.  
    SELECT CHAR_LENGTH('歡迎訪問pan_junbiao的博客'); -- 輸出結果:18

2.2 LENGTH(str)函數

返回值為字符串str的長度,單位為字節。

  1.  
    SELECT LENGTH('pan_junbiao'); -- 輸出結果:11
  2.  
    SELECT LENGTH('阿標'); -- 輸出結果:6
  3.  
    SELECT LENGTH('pan_junbiao的博客'); -- 輸出結果:20

2.3 CONCAT(s1,s2,...)函數

返回連接參數產生的字符串,一個或多個待拼接的內容,任意一個為NULL則返回值為NULL。

SELECT CONCAT('現在的時間:',NOW()); -- 輸出結果:現在的時間:2019-01-17 11:27:58

2.4 CONCAT_WS(x,s1,s2,...)函數

返回多個字符串拼接之后的字符串,每個字符串之間有一個x。

SELECT CONCAT_WS(';','pan_junbiao的博客','KevinPan','pan_junbiao'); -- 輸出結果:pan_junbiao的博客;KevinPan;pan_junbiao

2.5 INSERT(s1,x,len,s2)函數

返回字符串s1,其子字符串起始於位置x,被字符串s2取代len個字符。

SELECT INSERT('您好,歡迎訪問阿標的博客',8,2,'pan_junbiao'); -- 輸出結果:您好,歡迎訪問pan_junbiao的博客

2.6 LEFT(s,n)、RIGHT(s,n)函數

前者返回字符串s從最左邊開始的n個字符,后者返回字符串s從最右邊開始的n個字符。

  1.  
    SELECT LEFT('您好,歡迎訪問pan_junbiao的博客',7); -- 輸出結果:您好,歡迎訪問
  2.  
    SELECT RIGHT('您好,歡迎訪問pan_junbiao的博客',14); -- 輸出結果:pan_junbiao的博客

2.7 REPLACE(s,s1,s2)函數

返回一個字符串,用字符串s2替代字符串s中所有的字符串s1。

SELECT REPLACE('您好,歡迎訪問阿標的博客','阿標','pan_junbiao'); -- 輸出結果:您好,歡迎訪問pan_junbiao的博客

2.8 SUBSTRING(s,n,len)、MID(s,n,len)函數

兩個函數作用相同,從字符串s中返回一個第n個字符開始、長度為len的字符串。

  1.  
    SELECT SUBSTRING('您好,歡迎訪問pan_junbiao的博客',8,14); -- 輸出結果:pan_junbiao的博客
  2.  
    SELECT MID('您好,歡迎訪問pan_junbiao的博客',8,14); -- 輸出結果:pan_junbiao的博客

2.9 LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1)函數

三個函數作用相同,返回子字符串str1在字符串str中的開始位置(從第幾個字符開始)。

  1.  
    SELECT LOCATE('pan_junbiao','您好,歡迎訪問pan_junbiao的博客'); -- 輸出結果:8
  2.  
    SELECT POSITION('pan_junbiao' IN '您好,歡迎訪問pan_junbiao的博客'); -- 輸出結果:8
  3.  
    SELECT INSTR('您好,歡迎訪問pan_junbiao的博客','pan_junbiao'); -- 輸出結果:8

2.10 FIELD(s,s1,s2,...)函數

返回第一個與字符串s匹配的字符串的位置。

SELECT FIELD('pan_junbiao','pan_junbiao的博客','KevinPan','阿標','pan_junbiao'); -- 輸出結果:4

 

3、日期和時間函數

日期和時間函數是MySQL中另一最常用的函數。其主要用於對表中的日期和時間數據的處理。

函數 說明
CURDATE()、CURRENT_DATE() 返回當前日期,格式:yyyy-MM-dd。
CURTIME()、CURRENT_TIME() 返回當前時間,格式:HH:mm:ss。
NOW()、CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE()、LOCALTIMESTAMP() 返回當前日期和時間,格式:yyyy-MM-dd HH:mm:ss。
UNIX_TIMESTAMP() 返回一個格林尼治標准時間1970-01-01 00:00:00到現在的秒數。
UNIX_TIMESTAMP(date) 返回一個格林尼治標准時間1970-01-01 00:00:00到指定時間的秒數。
FROM_UNIXTIME(date) 和UNIX_TIMESTAMP互為反函數,把UNIX時間戳轉換為普通格式的時間。
UTC_DATE() 返回當前UTC(世界標准時間)日期值,其格式為"YYYY-MM-DD"或"YYYYMMDD"。
UTC_TIME() 返回當前UTC時間值,其格式為"YYYY-MM-DD"或"YYYYMMDD"。具體使用哪種取決於函數用在字符串還是數字語境中
MONTH(d) 返回日期d中的月份值,范圍是1~12。
MONTHNAME(d) 返回日期d中的月份名稱,如:January、February等。
DAYNAME(d) 返回日期d是星期幾,如:Monday、Tuesday等。
DAYOFWEEK(d) 返回日期d是星期幾,如:1表示星期日,2表示星期一等。
WEEKDAY(d) 返回日期d是星期幾,如:0表示星期一,1表示星期二等。
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 date) 從日期中提取一部分,type可以是YEAR、YEAR_MONTH、DAY_HOUR、DAY_MICROSECOND、DAY_MINUTE、DAY_SECOND
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加上一個時間段后的日期。
DATE_ADD(d,INTERVAL expr type) 同ADDDATE(d,INTERVAL expr type)
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類型數據的顯示格式。

參數說明:

type格式:

SECOND 秒 SECONDS

MINUTE 分鍾 MINUTES

HOUR 時間 HOURS

DAY 天 DAYS

MONTH 月 MONTHS

YEAR 年 YEARS

MINUTE_SECOND 分鍾和秒 "MINUTES:SECONDS"

HOUR_MINUTE 小時和分鍾 "HOURS:MINUTES"

DAY_HOUR 天和小時 "DAYS HOURS"

YEAR_MONTH 年和月 "YEARS-MONTHS"

HOUR_SECOND 小時, 分鍾, "HOURS:MINUTES:SECONDS"

DAY_MINUTE 天, 小時, 分鍾 "DAYS HOURS:MINUTES"

DAY_SECOND 天, 小時, 分鍾, 秒 "DAYS HOURS:MINUTES:SECONDS"

3.1 CURDATE()、CURRENT_DATE()函數

返回當前日期,格式:yyyy-MM-dd。

  1.  
    SELECT CURDATE(); -- 輸出結果:2019-01-17
  2.  
    SELECT CURRENT_DATE(); -- 輸出結果:2019-01-17

3.2 CURTIME()、CURRENT_TIME()函數

返回當前時間,格式:HH:mm:ss。

  1.  
    SELECT CURTIME(); -- 輸出結果:16:18:28
  2.  
    SELECT CURRENT_TIME(); -- 輸出結果:16:18:28

3.3 NOW()、CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE()、LOCALTIMESTAMP()函數

返回當前日期和時間,格式:yyyy-MM-dd HH:mm:ss。

  1.  
    SELECT NOW(); -- 輸出結果:2019-01-17 16:28:58
  2.  
    SELECT CURRENT_TIMESTAMP(); -- 輸出結果:2019-01-17 16:28:58
  3.  
    SELECT LOCALTIME(); -- 輸出結果:2019-01-17 16:28:58
  4.  
    SELECT SYSDATE(); -- 輸出結果:2019-01-17 16:28:58
  5.  
    SELECT LOCALTIMESTAMP(); -- 輸出結果:2019-01-17 16:28:58

3.4 DATEDIFF(d1,d2)函數

計算日期d1與d2之間相隔的天數。

SELECT DATEDIFF('2019-1-17','2019-1-10'); -- 輸出結果:7

3.5 ADDDATE(d,n)函數

計算起始日期d加上n天的日期。

SELECT ADDDATE('2019-1-17',3); -- 輸出結果:2019-01-20

3.6 ADDDATE(d,INTERVAL expr type)函數

計算起始日期d加上一個時間段后的日期。

示例:將日期2019-1-17加上一年兩個月后的日期。

SELECT ADDDATE('2019-1-17',INTERVAL '1 2' YEAR_MONTH); -- 輸出結果:2020-03-17

3.7 DATE_FORMAT(d,f)函數

按照表達式 f 的要求顯示日期d。

SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H時%i分%s秒'); -- 輸出結果:2019年01月17日 19時18分08秒

 

4、條件判斷函數

條件函數用來在SQL語句中進行條件判斷。根據不同的條件,執行不同的SQL語句。MySQL支持的條件判斷函數及作用。

函數 說明
IF(expr,v1,v2) 如果表達式expr成立,則執行v1;否則執行v2。
IFNULL(v1,v2) 如果v1不為空,則顯示v1的值;否則顯示v2的值。
CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2 …][ELSE vn] END case表示函數開始,end表示函數結束。如果表達式expr1成立,則返回v1的值;如果表達式expr2成立,則返回v2的值。依次類推,最后遇到else時,返回vn的值。
CASE expr WHEN e1 THEN v1 [WHEN e2 THEN v2 …][ELSE vn] END case表示函數開始,end表示函數結束。如果表達式expr取值為e1,則返回v1的值;如果表達式expr取值為e2,則返回v2的值,依次類推,最后遇到else,則返回vn的值。

4.1 IF()函數

示例:使用IF語句用來進行條件判斷。

  1.  
    SELECT IF(TRUE,'A','B'); -- 輸出結果:A
  2.  
    SELECT IF(FALSE,'A','B'); -- 輸出結果:B

4.2 IFNULL()函數

  1.  
    SELECT IFNULL(NULL,'B'); -- 輸出結果:B
  2.  
    SELECT IFNULL('pan_junbiao的博客','B'); -- 輸出結果:pan_junbiao的博客

4.2 CASE語句

示例:使用CASE語句用來進行條件判斷。

  1.  
    -- 創建存儲過程
  2.  
    CREATE PROCEDURE example_case(IN x INT)
  3.  
    BEGIN
  4.  
    CASE x
  5.  
    WHEN 1 THEN SELECT 1;
  6.  
    WHEN 2 THEN SELECT 2;
  7.  
    ELSE SELECT 3;
  8.  
    END CASE;
  9.  
    END;
  10.  
     
  11.  
    -- 調用存儲過程
  12.  
    CALL example_case(5); -- 輸出結果:3

 

5、系統信息函數

系統信息函數用來查詢MySQL數據庫的系統信息。

函數 說明
VERSION() 獲取數據庫的版本號。
CONNECTION_ID() 獲取服務器的連接數。
DATABASE()、SCHEMA() 獲取當前數據庫名。
USER()、SYSTEM_USER()、SESSION_USER() 獲取當前用戶名。
CURRENT_USER()、CURRENT_USER 獲取當前用戶名。
CHARSET(str) 獲取字符串str的字符集。
COLLATION(str) 獲取字符串str的字符排序方法。
LAST_INSERT_ID() 獲取最近生成的AUTO_INCREMENT值。

5.1 獲取MySQL版本號、連接數和數據庫名

  1.  
    SELECT VERSION(); -- 輸出結果:8.0.13
  2.  
    SELECT CONNECTION_ID(); -- 輸出結果:160
  3.  
    SELECT DATABASE(); -- 輸出結果:db_admin

5.2 獲取當前用戶

SELECT CURRENT_USER(); -- 輸出結果:root@localhost

 

6、加密函數

加密函數是MySQL中用來對數據進行加密的函數。因為數據庫中有些很敏感的信息不希望被其他人看到,所以就可以通過加密的方式來使這些數據變成看似亂碼的數據。

函數 說明
PASSWORD(str) 對字符串str進行加密。經此函數加密后的數據是不可逆的。其經常用於對普通數據進行加密。
MD5(str) 對字符串str進行MD5加密。經常用於對普通數據進行加密。
ENCODE(str,pass_str) 使用字符串pass_str來加密字符串str。加密后的結果是一個二進制數,必須使用BLOB類型的字段來保存它。
DECODE(crypt_str,pass_str) 使用字符串pass_str來為crypt_str解密。

 

7、其他函數

MySQL中除了上述內置函數以外,還包含很多函數。例如,數字格式化函數FORMAT(x,n),IP地址與數字的轉換函數INET_ATON(ip),還有加鎖函數GET_LOCT(name,time)、解鎖函數RELEASE_LOCK(name)等等。

函數 說明
FORMAT(X,D) 將數字X格式化,將X保留到小數點后D位,截斷時要進行四舍五入。
CONV(N,from_base,to_base) 不同進制數之間的轉換,返回值為數值N的字符串表示,由from_base進制轉換為to_base進制。
INET_ATON(expr) 給出一個作為字符串的網絡地址的點地址表示,返回一個代表該地址數值的整數,地址可以使4或8比特。
INET_NTOA(expr) 給定一個數字網絡地址(4或8比特),返回作為字符串的該地址的點地址表示。
BENCHMARK(count,expr) 重復執行count次表達式expr,它可以用於計算MySQL處理表達式的速度,結果值通常是0(0只是表示很快,並不是沒有速度)。另一個作用是用它在MySQL客戶端內部報告語句執行的時間。
CONVERT(str USING charset) 使用字符集charset表示字符串str。

7.1 FORMAT(X,D)函數

將數字X格式化,將X保留到小數點后D位,截斷時要進行四舍五入。

  1.  
    SELECT FORMAT(1.2323,3); -- 輸出結果:1.232
  2.  
    SELECT FORMAT(1.2328,3); -- 輸出結果:1.233

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM