標籤: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 基本用法之函數