首頁 >資料庫 >mysql教程 >【MySQL 09】常用函數

【MySQL 09】常用函數

黄舟
黄舟原創
2017-02-04 13:25:321057瀏覽

1、數學函數

  • ABS(x) 傳回x的絕對值

  • BIN(x) 傳回x的二進位(OCT返回八進位,HEX返回十六進位)

  • 返回大於x的最小整數值
  • EXP(x) 返回值e(自然對數的底)的x次方
  • FLOOR(x) 返回小於x的最大整數值
  • GREATEST( x1,x2,…,xn)傳回集合中最大的值
  • LEAST(x1,x2,…,xn) 傳回集合中最小的值
  • LN(x) 傳回集合中最小的值
  • LN(x) 回傳x的自然對數LOG( x,y)傳回x的以y為底的對數
  • MOD(x,y) 傳回x/y的模(餘數) PI()傳回pi的值(圓周率)
  • RAND()傳回0到1內的隨機值,可以透過提供一個參數(種子)使RAND()隨機數產生器產生一個指定的值。
  • ROUND(x,y)回傳參數x的四捨五入的有y位小數的值
  • SIGN(x) 傳回代表數字x的符號的值
  • SQRT(平方根
  • TRUNCATE(x,y) 傳回數字x截短為y位小數的結果

    2、聚集函數
  • AVG(col)傳回指定列的平均值col)傳回指定列的最小值
  • MAX(col)傳回指定列的最大值
  • SUM(col)傳回指定列的所有值總和
  • GROUP_CONCAT(col) 傳回由屬於一類群組的列值連結組合而成的結果
  • 3、字串函數

    ASCII(char)傳回字元的ASCII碼值BIT_LENGTH(str)傳回字串的位元長度
  • ,s2…,sn)將s1,s2…,sn連接成字串
  • CONCAT_WS(sep,s1,s2…,sn)將s1,s2…,sn連接成字串,並用sep字元間隔
  • INSERT(str,x,y,instr) 將字串str從第x位置開始,y個字元長的子字串替換為字串instr,傳回結果
  • FIND_IN_SET(str,list)分析逗號分隔的list列表,如果發現str,返回str在list中的位置
  • LCASE(str)或LOWER(str) 返回將字串str中所有字元改變為小寫後的結果
  • LEFT(str, x)回傳字串str中最左邊的x個字
  • LENGTH(s)傳回字串str中的字元數
  • LTRIM(str) 從字串str中切掉開頭的空格
  • LTRIM(str) 從字串str中切掉開頭的空格

  • LTRIM(str) 從字串str中切掉開頭的空格

  • LTRIM(str) 從字串str
  • POSITION(substr,str) 回傳子字串substr在字串str中第一次出現的位置

  • QUOTE(str) 用反斜線轉義str中的單引號

  • str ,rplcstr)回傳字串str重複x次的結果
  • REVERSE(str) 傳回顛倒字串str的結果
  • RIGHT(str,x) 傳回字串中最右邊的x個字元
  • RIGHT(str,x) 傳回字串中最右邊的x個字元

  • RTRIM(str) 返回字符串str尾部的空格
  • STRCMP(s1,s2)比較字符串s1和s2
  • TRIM(str)去除字符串首部和尾部的所有空格
  • UCASE(str)或UPPER(str) 傳回將字串str中所有字元轉換成大寫後的結果

    4、日期和時間函數
  • CURDATE()或CURRENT_DATE() 傳回目前的日期
  • CURDATE()或CURRENT_DATE() 傳回目前的日期

  • CURDATE()或CURRENT_DATE() 傳回目前的日期
  • CURDATE()或CURRENT_DATE() 傳回目前的日期

  • CURDATE()或CURRENT_DATE() 傳回目前的日期
  • CURDATE()或CURRENT_DATE() 傳回目前的日期

  • CURDATE()或CURRENT_DATE() 傳回目前的日期
  • CURDATE()或CURRENT_DATE() 傳回目前的日期

  • CURTIME()或CURRENT_TIME() 傳回目前的時間
  • CURRENT_DATE,INTERVAL 6 MONTH);

  • DATE_FORMAT(date,fmt) 依照指定的fmt格式格式化日期date值

  • DATE_SUB(date,INTERB(date,INdate

    int必須按照關鍵字進行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
  • DAYOFWEEK(date) 返回date所代表的一星期中的第幾天(1~7)
  • DAYOFMONTH(date) 回傳date是一個月的第幾天(1~31)
  • DAYOFYEAR(date) 回傳date是一年的第幾天(1~366)
  • DAYNAY(dateDAYNAY(date) 返回的星期名,如:SELECT DAYNAME(CURRENT_DATE);
  • FROM_UNIXTIME(ts,fmt) 依據指定的fmt格式,格式化UNIX時間點傳回
  • HOUR(time) 返回的戳time 23)
  • MINUTE(time) 傳回time的分鐘值(0~59)
  • MONTH(date) 傳回date的月份值(1~12)
  • )名,如:SELECT
  • 🎜MONTHNAME(CURRENT_DATE);🎜🎜🎜🎜NOW() 傳回目前的日期和時間🎜🎜🎜🎜QUARTER(date) 返回目前的日期和時間🎜🎜🎜🎜QUARTER(date) 返回144),如一年中的季度。 SELECT QUARTER(CURRENT_DATE);🎜🎜🎜🎜WEEK(date) 返回日期date為一年中第幾週(0~53)🎜
  • YEAR(date) 回報FROM CURRENT_DATE) ;

    SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
  • SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
  • SELECT PERIOD_DIFF (200302,199802)

  • 在Mysql計算年齡: 
  • SELECT DATE_FYS age FROM employee;
  • 這樣,如果Brithday是未來的年月日的話,計算結果為0。 

  • 下面的SQL語句計算員工的絕對年齡,即Birthday是未來的日期時,將得到負值。

    SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') -(DATE_FORMAT(NOW(), '00-%m-%d') 
  • 加密函數

AES_ENCRYPT(str,key) :返回用密鑰key對字串str利用高級加密標準演算法加密後的結果,調用AES_ENCRYPT的結果是一個二進位字串,以BLOB類型儲存
  • AES_DECRYPT(str,key) 傳回以金鑰key對字串str利用高階加密標準演算法解密後的結果

DECODE(str,key):使用key作為金鑰解密加密字串str

  • ENCRYPT (str,salt): 使用UNIXcrypt()函數,用關鍵字salt(一個可以惟一確定口令的字串,就像鑰匙一樣)加密字串str

  • ENCODE(str,key): 使用key作為密鑰加密字串str,呼叫ENCODE()的結果是一個二進位字串,它以BLOB型別儲存

  • MD5() 計算字串str的MD5校驗和

  • PASSWORD(str) 傳回字串str的加密版本,這個加密過程是不可逆的,和UNIX密碼加密過程使用不同的演算法。 : 

    SELECT ENCRYPT('root','salt'); 

    SELECT ENCODE('xufeng','key'); 
  • SELECT DECODE(ENCODE('xufeng','key'),'key'); 解密放在一起 
  • SELECT AES_ENCRYPT('root','key'); 

    SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key'); S

    SELECT MD5('123456'); '123456');
  • 6、控制流函數
  • MySQL有4個函數是用來進行條件操作的,這些函數可以實現SQL的條件邏輯,允許開發者將一些應用程式業務邏輯轉換到資料庫後台。 ] WHEN[val1] THEN [result]…ELSE [default]END

  • 如果test和valN相等,則返回resultN,否則返回default

  • IF(test,t,f) 如果test是真,返回t;否則回傳f




    IFNULL(arg1,arg2) 如果arg1不是空,則回傳arg1,否則回傳arg2



    NULLIF(arg1,arg2) 如果arg1=arg2回傳NULL;否則回傳
    NULLIF(arg1,arg2) 如果arg1=arg2回傳NULL;否則回傳

    這些函數的第一個是IFNULL(),它有兩個參數,並且對第一個參數進行判斷。如果第一個參數不是NULL,函數就會向呼叫者傳回第一個參數;如果是NULL,將會傳回第二個參數。

如:SELECT IFNULL(1,2), IFNULL(NULL,10),IFNULL(4*NULL,'false'); NULLIF()函數將會檢驗提供的兩個參數是否相等,如果相等,則傳回NULL,如果不相等,就傳回第一個參數。

  • 如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);

  • 和許多腳本語言提供的IF()函數一樣,MySQL的IF()函數也可以建立一個簡單的條件測試,這個函數有三個參數,第一個是要被判斷的表達式,如果表達式為真,IF()將會傳回第二個參數,如果為假,IF()將會傳回第三個參數。


  • 如:SELECTIF(1100,'true','false');
  • IF()函數在只有兩種可能結果時才適合使用。然而,在現實世界中,我們可能發現在條件測試中會需要多個分支。在這種情況下,MySQL提供了CASE函數,它就跟PHP和Perl語言的switch-case條件程式一樣。
  • CASE函數的格式有些複雜,通常如下所示: CASE [expression to be evaluated] WHEN [val 1] THEN [result 1] WHEN [val 2] THEN [result 2] WHEN [val 3] THEN [result 3] …… WHEN [val n] THEN [result n] ELSE [default result] END

  • 這裡,第一個參數是要被判斷的值或表達式,接下來的是一系列的WHEN-THEN區塊,每一塊的第一個參數指定要比較的值,如果為真,就回傳結果。所有的WHEN-THEN區塊將以ELSE區塊結束,當END結束了所有外部的CASE區塊時,如果前面的每一個區塊都不匹配就會傳回ELSE區塊指定的預設結果。如果沒有指定ELSE區塊,而且所有的WHEN-THEN比較都不是真,MySQL將會傳回NULL。

  • CASE函數還有另外一種句法,有時使用起來非常方便,如下: CASE WHEN [conditional test 1] THEN [result 1] WHEN [conditional test 2] THEN [result 2] ELSE [default result] END在這種條件下,傳回的結果取決於對應的條件測試是否為真。

  • 範例: 

  • 範例: 

  • mysql>SELECT CASE 'green' WHEN 'red' THEN 'stop' WHEN 'green' THEN 'go' END;
  • , I WHEN 2 THEN 'b' ELSE 'N/A' END; SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN(2+2)4 THEN 'not OK' END ASSTATUS;
  • SELECT Name,IF((IsActive = 1),'已啟動','未啟動') AS RESULT FROMUserLoginInfo; SELECT fname,lname,(math+sci+lit) AS total, CASE WHEN (math+sci+lit)

      7、格式化函數
    • DATE_FORMAT( ,fmt) 依照字串fmt格式化日期date值
    • FORMAT(x,y) 把x格式化為以逗號隔開的數字序列,y是結果的小數位數
    • INET_ATON(ip)傳回IP位址的數字表示
    • INET_NTOA(num) 回傳數字所代表的IP位址

    • TIME_FORMAT(time,fmt) 依照字串fmt格式化時間值 
    • 其中最簡單的函數是FORMAT(fmt) ,它可以把大的數值格式化為以逗號間隔的易讀的序列。
    • 範例: 
    • 範例: 
    • SELECT FORMAT(34234.34323432,3);

    • Sv.D.

    • SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
    • SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
    • S ,'%h:%i %p');

    SELECT INET_ATON('10.122.89.47');

    • SELECT INET_NTOA(175790383);

      為了進行資料類型轉化,MySQL提供了CAST()函數,它可以把一個值轉換成指定的資料類型。

    類型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
    • 範例: 

    reee

    • BENCHMARK(count,expr) 將表達式expr重複運行count次

    • CONNECTION_ID() 傳回目前客戶的連接ID

    • FOUND_ROWS() 傳回最後一個行查詢的最後一行編號()或SYSTEM_USER() 傳回目前登陸使用者名稱

    • VERSION() 傳回的現有登陸使用者名稱

    • VERSION() 回傳MySQL伺服器的版本

    • 範例: 

      SELECT DATABASE(),VERSION(),ARKUS(998),ARKUS99ECT (RAND()*PI())); 
    • #該例中,MySQL計算LOG(RAND()*PI())表達式9999999次。


    • 以上就是 【MySQL 09】常用函數的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn