一、數學函數
abs(x) 傳回x的絕對值
bin(x) 傳回x的二進制(oct傳回八進制,hex傳回十六進制)
ceiling(x) 傳回大于x的最小整數值
exp(x) 傳回值e(自然對數的底)的x次方
floor(x) 傳回小于x的最大整數值
ln(x) 傳回x的自然對數
log(x,y) 傳回x的以y為底的對數
mod(x,y) 傳回x/y的模(餘數)
rand() 傳回0到1内的随機值
round(x,y) 傳回參數x的四舍五入的有y位小數的值
sign(x) 傳回代表數字x的符号的值
sqrt(x) 傳回一個數的平方根
truncate(x,y) 傳回數字x截短為y位小數的結果
二、聚合函數(常用于group by從句的select查詢中)
avg(col) 傳回指定列的平均值
count(col) 傳回指定列中非null值的個數
min(col) 傳回指定列的最小值
max(col) 傳回指定列的最大值
sum(col) 傳回指定列的所有值之和
group_concat(col) 傳回由屬于一組的列值連接配接組合而成的結果
三、字元串函數
ascii(char) 傳回字元的ascii碼值
concat(s1,s2...,sn) 将s1,s2...,sn連接配接成字元串
insert(str,x,y,instr) 将字元串str從第x位置開始,y個字元長的子串替換為字元串instr,傳回結果
lcase(str)或lower(str) 傳回将字元串str中所有字元改變為小寫後的結果
ucase(str)或upper(str) 傳回将字元串str中所有字元轉變為大寫後的結果
left(str,x) 傳回字元串str中最左邊的x個字元
length(s) 傳回字元串str中的字元數
position(substr,str) 傳回子串substr在字元串str中第一次出現的位置
reverse(str) 傳回颠倒字元串str的結果
right(str,x) 傳回字元串str中最右邊的x個字元
strcmp(s1,s2) 比較字元串s1和s2
trim(str) 去除字元串首部和尾部的所有空格
四、日期和時間函數
curdate()或current_date() 傳回目前的日期
curtime()或current_time() 傳回目前的時間
date_add(date,interval int keyword) 傳回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:selectdate_add(current_date,interval 6 month);
dayofweek(date) 傳回date所代表的一星期中的第幾天(1~7)
dayofmonth(date) 傳回date是一個月的第幾天(1~31)
dayofyear(date) 傳回date是一年的第幾天(1~366)
dayname(date) 傳回date的星期名,如:select dayname(current_date);
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)
五、控制流函數
mysql有4個函數是用來進行條件操作的,這些函數可以實作sql的條件邏輯,允許開發者将一些應用程式業務邏輯轉換到資料庫背景。
mysql控制流函數:
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
詳解:
ifnull(arg1,arg2) ,它有兩個參數,并且對第一個參數進行判斷。如果第一個參數不是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);
mysql的if()函數可以建立一個簡單的條件測試,這個函數有三個參數,第一個是要被判斷的表達式,如果表達式為真,if()将會傳回第二個參數,如果為假,if()将會傳回第三個參數。
select if(1<10,2,3),if(56>100,'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]
這種條件下,傳回的結果取決于相應的條件測試是否為真。
示例:
select case 'green'
when 'red' then 'stop'
when 'green' then 'go' end;