在業務開發中,mysql其實也有不少經常使用的函數,來方便查詢數據。mysql
有的時候根據業務須要也能夠寫到存儲進程中,可是這是不建議的,由於業務一旦複雜起來存儲進程中的sql會愈來愈長,可讀性太差,後期維護起來會很難。sql
好了,開始說正題吧。數據庫
字符串相關函數:數組
concat(s1,s2,s3,...) --把傳入的參數鏈接成爲一個字符串。 //例如,select concat('aaa','bbb','ccc'),concat('aaa',null);任何字符串與 NULL 進行鏈接的結果都將是 NULL INSERT(str ,x,y,instr) --將字符串 str 從第 x 位置開始,y 個字符長的子串替換爲字符串 instr。 //例如,select insert('beijing2008you',12,3,'me') LOWER(str)和 UPPER(str) --把字符串轉換成小寫或大寫 //例如,select lower('BEIJING');select upper('beijing'); LEFT(str,x)和 RIGHT(str,x) --分別返回字符串最左邊的 x 個字符和最右邊的 x 個字符。 //例如,select left('qwertasd',1);select right('qwertasd',1);若是第二個參數是 NULL,那麼將不返回任何字符串。 LPAD(str,n ,pad)和 RPAD(str,n ,pad) --用字符串 pad 對 str 最左邊和最右邊進行填充,直到長度爲 n 個字符長度。 //例如,select lpad('2008',20,'beijing');select rpad('2008',20,'beijing') LTRIM(str)和 RTRIM(str) --去掉字符串 str 左側和右側空格。 //例如,select ltrim(' |beijing');select rtrim('beijing| '); LTRIM(str)和 RTRIM(str) --去掉字符串 str 左側和右側空格。 //例如,select ltrim(' |beijing');select rtrim('beijing| '); REPEAT(str,x) --返回 str 重複 x 次的結果。 //例如,select repeat('mysql',3) REPLACE(str,a,b) --用字符串 b 替換字符串 str 中全部出現的字符串 a。 //例如,select replace('beijing_2012','_2012','2008'); STRCMP(s1,s2) --比較字符串 s1 和 s2 的 ASCII 碼值的大小。若是 s1 比 s2 小,那麼返回-1;若是 s1 與 s2 相等,那麼返回 0;若是 s1 比 s2 大,那麼返回 1。 //例如,select strcmp('a','b'),strcmp('b','b'),strcmp('c','b'); TRIM(str) --去掉目標字符串的開頭和結尾的空格。 //例如,select trim(' $ beijing2008 $ '); SUBSTRING(str,x,y) --返回從字符串 str 中的第 x 位置起 y 個字符長度的字串。 //例如,select substring('beijing2008',8,4),substring('beijing2008',1,7);
數組函數:網絡
ABS(x) --返回 x 的絕對值。 //例如,select abs(-0.8); CEIL(x) --返回大於 x 的最大整數。 //例如,select ceil(-0.4);select ceil(0.4); FLOOR(x) --返回小於 x 的最大整數,和 CEIL 的用法恰好相反。 //例如,select floor(0.4); MOD(x,y) --返回 x/y 的模。和 x%y 的結果相同,模數和被模數任何一個爲 NULL 結果都爲 NULL。 //例如,select MOD(15,10),MOD(1,11),MOD(NULL,10); RAND() --返回 0 到 1 內的隨機值。每次執行結果都不同。 //例如,select RAND(),RAND(); //例如,select ceil(100*rand()),ceil(100*rand()); ROUND(x,y) --返回參數 x 的四捨五入的有 y 位小數的值。若是是整數,將會保留 y 位數量的 0;若是不寫 y,則默認 y 爲 0,即將 x 四捨五入後取整。適合於將全部數字保留一樣小數位的狀況。
//例如,select ROUND(1.1),ROUND(1.136,2),ROUND(1,2); TRUNCATE(x,y) --返回數字 x 截斷爲 y 位小數的結果。 //例如,select ROUND(1.235,2),TRUNCATE(1.235,2);
日期和時間函數:函數
CURDATE() --返回當前日期,只包含年月日。 //例如,select CURDATE(); CURTIME() --返回當前時間,只包含時分秒。 //例如,select CURTIME(); NOW() --返回當前的日期和時間,年月日時分秒全都包含。 //例如,select NOW(); UNIX_TIMESTAMP(date) --返回日期 date 的 UNIX 時間戳。 //例如,select UNIX_TIMESTAMP(now()); FROM_UNIXTIME(unixtime) --返回UNIXTIME時間戳的日期值。 //例如,select FROM_UNIXTIME(1184134516); WEEK(DATE)和 YEAR(DATE) --前者返回所給的日期是一年中的第幾周,後者返回所給的日期是哪一年。
//例如,select WEEK(now()),YEAR(now()); HOUR(time)和 MINUTE(time) --前者返回所給時間的小時,後者返回所給時間的分鐘。 //例如, select HOUR(CURTIME()),MINUTE(CURTIME()); MONTHNAME(date) --返回 date 的英文月份名稱。 //例如,select MONTHNAME(now()); DATE_FORMAT(date,fmt) --按字符串 fmt 格式化日期 date 值。 //例如 ,select DATE_FORMAT(now(),'%M,%D,%Y'); DATE_ADD(date,INTERVAL expr type) --返回與所給日期 date 相差 INTERVAL 時間段的日期。 //例如,select now() current,date_add(now(),INTERVAL 31 day) after31days,date_add(now(),INTERVAL '1_2' year_month) after_oneyear_twomonth;DATEDIFF(date1,date2) --用來計算兩個日期之間相差的天數。 //例如,select DATEDIFF('2008-08-08',now());
流程函數:加密
IF(value,t f) --若是 value 是真,返回 t;不然返回 f。 //例如,select if(salary>2000,'high','low') from salary; IFNULL(value1,value2) --若是 value1 不爲空返回 value1,不然返回 value2。 //例如,select ifnull(salary,0) from salary; CASE WHEN [value1] THEN[result1]…ELSE[default]END --若是 value1 是真,返回 result1,不然返回 default。
//例如, select case when salary<=2000 then 'low' else 'high' end from salary; CASE [expr] WHEN [value1] THEN[result1]…ELSE[default]END --若是 expr 等於 value1,返回 result1,不然返回 default。
//例如,select case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end from salary;
其餘函數:spa
DATABASE() --返回當前數據庫名。 VERSION() --返回當前數據庫版本。 USER() --返回當前登陸用戶名。 INET_ATON(IP) --返回 IP 地址的網絡字節序表示。 INET_NTOA(num) --返回網絡字節序表明的 IP 地址。 PASSWORD(str) --返回字符串 str 的加密版本,一個 41 位長的字符串。(只可用於密碼) MD5(str) --返回字符串 str 的 MD5 值,經常使用來對應用中的數據進行加密。