知識點:Mysql 基本用法之函數

來源:互聯網
上載者:User

標籤:concat   ...   字串函數   基本使用   mysql   def   執行個體   color   return   

函數

MySQL中提供了許多內建函數

 

例如: sql 內建函數:

一、數學函數    ROUND(x,y)        返回參數x的四捨五入的有y位小數的值            RAND()        返回0到1內的隨機值,可以通過提供一個參數(種子)使RAND()隨機數產生器產生一個指定的值。二、彙總函式(常用於GROUP BY從句的SELECT查詢中)    AVG(col)返回指定列的平均值    COUNT(col)返回指定列中非NULL值的個數    MIN(col)返回指定列的最小值    MAX(col)返回指定列的最大值    SUM(col)返回指定列的所有值之和    GROUP_CONCAT(col) 返回由屬於一組的列值串連組合而成的結果        三、字串函數    CHAR_LENGTH(str)        傳回值為字串str 的長度,長度的單位為字元。一個多位元組字元算作一個單字元。    CONCAT(str1,str2,...)        字串拼接        如有任何一個參數為NULL ,則傳回值為 NULL。    CONCAT_WS(separator,str1,str2,...)        字串拼接(自訂串連符)    CONCAT_WS()不會忽略任何Null 字元串。 (然而會忽略所有的NULL)    CONV(N,from_base,to_base)        進位轉換        例如:            SELECT CONV(‘a‘,16,2); 表示將 a 由16進位轉換為2進位字串表示    FORMAT(X,D)        將數字X 的格式寫為‘#,###,###.##‘,以四捨五入的方式保留小數點後 D 位, 並將結果以字串的形式返回。若  D 為 0, 則返回結果不帶有小數點,或不含小數部分。        例如:            SELECT FORMAT(12332.1,4); 結果為: ‘12,332.1000‘    INSERT(str,pos,len,newstr)        在str的指定位置插入字串            pos:要替換位置其實位置            len:替換的長度            newstr:新字串        特別的:            如果pos超過原字串長度,則返回原字串            如果len超過原字串長度,則由新字串完全替換    INSTR(str,substr)        返回字串 str 中子字串的第一個出現位置。    LEFT(str,len)        返回字串str 從開始的len位置的子序列字元。    LOWER(str)        變小寫    UPPER(str)        變大寫       REVERSE(str)        返回字串 str ,順序和字元順序相反。            SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)        不帶有len 參數的格式從字串str返回一個子字串,起始於位置 pos。帶有len參數的格式從字串str返回一個長度同len字元相同的子字串,起始於位置 pos。 使用 FROM的格式為標準 SQL 文法。也可能對pos使用一個負值。假若這樣,則子字串的位置起始於字串結尾的pos 字元,而不是字串的開頭位置。在以下格式的函數中可以對pos 使用一個負值。        mysql> SELECT SUBSTRING(‘Quadratically‘,5);            -> ‘ratically‘        mysql> SELECT SUBSTRING(‘foobarbar‘ FROM 4);            -> ‘barbar‘        mysql> SELECT SUBSTRING(‘Quadratically‘,5,6);            -> ‘ratica‘        mysql> SELECT SUBSTRING(‘Sakila‘, -3);            -> ‘ila‘        mysql> SELECT SUBSTRING(‘Sakila‘, -5, 3);            -> ‘aki‘        mysql> SELECT SUBSTRING(‘Sakila‘ FROM -4 FOR 2);            -> ‘ki‘            四、日期和時間函數    CURDATE()或CURRENT_DATE() 返回當前的日期    CURTIME()或CURRENT_TIME() 返回當前的時間    DAYOFWEEK(date)   返回date所代表的一星期中的第幾天(1~7)    DAYOFMONTH(date)  返回date是一個月的第幾天(1~31)    DAYOFYEAR(date)   返回date是一年的第幾天(1~366)    DAYNAME(date)   返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);    FROM_UNIXTIME(ts,fmt)  根據指定的fmt格式,格式化UNIX時間戳記ts    HOUR(time)   返回time的小時值(0~23)    MINUTE(time)   返回time的分鐘值(0~59)    MONTH(date)   返回date的月份值(1~12)    MONTHNAME(date)   返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);    NOW()    返回當前的日期和時間    QUARTER(date)   返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);    WEEK(date)   返回日期date為一年中第幾周(0~53)    YEAR(date)   返回日期date的年份(1000~9999)        重點:    DATE_FORMAT(date,format) 根據format字串格式化date值       mysql> SELECT DATE_FORMAT(‘2009-10-04 22:23:00‘, ‘%W %M %Y‘);        -> ‘Sunday October 2009‘       mysql> SELECT DATE_FORMAT(‘2007-10-04 22:23:00‘, ‘%H:%i:%s‘);        -> ‘22:23:00‘       mysql> SELECT DATE_FORMAT(‘1900-10-04 22:23:00‘,        ->                 ‘%D %y %a %d %m %b %j‘);        -> ‘4th 00 Thu 04 10 Oct 277‘       mysql> SELECT DATE_FORMAT(‘1997-10-04 22:23:00‘,        ->                 ‘%H %k %I %r %T %S %w‘);        -> ‘22 22 10 10:23:00 PM 22:23:00 00 6‘       mysql> SELECT DATE_FORMAT(‘1999-01-01‘, ‘%X %V‘);        -> ‘1998 52‘       mysql> SELECT DATE_FORMAT(‘2006-06-00‘, ‘%d‘);        -> ‘00‘        五、加密函數    MD5()            計算字串str的MD5校正和    PASSWORD(str)           返回字串str的加密版本,這個加密過程是無法復原轉的,和UNIX密碼加密過程使用不同的演算法。        六、控制流程函數                CASE WHEN[test1] THEN [result1]...ELSE [default] END        如果testN是真,則返回resultN,否則返回default    CASE [test] 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;否則返回arg1   

 

date_format 的執行個體:

#1 基本使用mysql> SELECT DATE_FORMAT(‘2009-10-04 22:23:00‘, ‘%W %M %Y‘);        -> ‘Sunday October 2009‘mysql> SELECT DATE_FORMAT(‘2007-10-04 22:23:00‘, ‘%H:%i:%s‘);        -> ‘22:23:00‘mysql> SELECT DATE_FORMAT(‘1900-10-04 22:23:00‘,    ->                 ‘%D %y %a %d %m %b %j‘);        -> ‘4th 00 Thu 04 10 Oct 277‘mysql> SELECT DATE_FORMAT(‘1997-10-04 22:23:00‘,    ->                 ‘%H %k %I %r %T %S %w‘);        -> ‘22 22 10 10:23:00 PM 22:23:00 00 6‘mysql> SELECT DATE_FORMAT(‘1999-01-01‘, ‘%X %V‘);        -> ‘1998 52‘mysql> SELECT DATE_FORMAT(‘2006-06-00‘, ‘%d‘);        -> ‘00‘#2 準備表和記錄CREATE TABLE blog (    id INT PRIMARY KEY auto_increment,    NAME CHAR (32),    sub_time datetime);INSERT INTO blog (NAME, sub_time)VALUES    (‘第1篇‘,‘2015-03-01 11:31:21‘),    (‘第2篇‘,‘2015-03-11 16:31:21‘),    (‘第3篇‘,‘2016-07-01 10:21:31‘),    (‘第4篇‘,‘2016-07-22 09:23:21‘),    (‘第5篇‘,‘2016-07-23 10:11:11‘),    (‘第6篇‘,‘2016-07-25 11:21:31‘),    (‘第7篇‘,‘2017-03-01 15:33:21‘),    (‘第8篇‘,‘2017-03-01 17:32:21‘),    (‘第9篇‘,‘2017-03-01 18:31:21‘);#3. 提取sub_time欄位的值,按照格式後的結果即"年月"來分組SELECT DATE_FORMAT(sub_time,‘%Y-%m‘),COUNT(1) FROM blog GROUP BY DATE_FORMAT(sub_time,‘%Y-%m‘);#結果+-------------------------------+----------+| DATE_FORMAT(sub_time,‘%Y-%m‘) | COUNT(1) |+-------------------------------+----------+| 2015-03                       |        2 || 2016-07                       |        4 || 2017-03                       |        3 |+-------------------------------+----------+3 rows in set (0.00 sec)

 

一 、自訂函數

!!!注意!!! 函數中不要寫sql語句(否則會報錯),函數僅僅只是一個功能,是一個在sql中被應用的功能 若要想在begin...end...中寫sql,請用預存程序

自訂函數例子:

delimiter //create function f1(    i1 int,    i2 int)returns intBEGIN    declare num int;    set num = i1 + i2;    return(num);END //delimiter ;

 

二、 刪除函數
drop function func_name;

 

三、 執行函數
   擷取傳回值 select UPPER(‘egon‘) into @res; SELECT @res;  在查詢中使用 select f1(11,nid) ,name from tb2;

 

 

附:Mysql 基本用法

一、【Mysql 基本用法之視圖】

二、【Mysql 基本用法之觸發器】

三、【Mysql 基本用法之事務】

四、【Mysql 基本用法之預存程序】

五、【Mysql 基本用法之函數】

六、【Mysql 基本用法之流程式控制制】

 

 

知識點:Mysql 基本用法之函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.