天天看點

mysql常用函數

一、數學函數

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;

下一篇: mysql增删改

繼續閱讀