1、函數(shù)
與其他計(jì)算機(jī)語(yǔ)言一樣,sql支持利用函數(shù)來(lái)處理數(shù)據(jù)。函數(shù)一般是在數(shù)據(jù)上執(zhí)行的,他給數(shù)據(jù)的轉(zhuǎn)換和處理提供了方便。
*注:函數(shù)沒(méi)有sql的可移植性強(qiáng)(不同數(shù)據(jù)庫(kù)管理系統(tǒng)的兼容性較差)
2、使用函數(shù)
大多數(shù)sql實(shí)現(xiàn)支持以下函數(shù):
>用于處理文本串的(如刪除或填充值,轉(zhuǎn)換值為大寫(xiě)或小寫(xiě))文本函數(shù)
>用于在數(shù)值數(shù)據(jù)上進(jìn)行算術(shù)操作(如返回絕對(duì)值,進(jìn)行代數(shù)運(yùn)算)的數(shù)值函數(shù)
>用于處理日期和時(shí)間值并從中提取特定成分(如:返回兩個(gè)日期之差,檢查日期有效性等)的日期和時(shí)間函數(shù)
2.1、文本處理函數(shù)
以Upper()函數(shù)為例:
輸入:
select vend_name, Upper(vend_name) AS vend_name_upcase
from vendors order by vend_name;
輸出:

分析:正如所見(jiàn),Upper()將文本轉(zhuǎn)換為大寫(xiě),因此本例中每個(gè)供應(yīng)商都列出兩次,第一次為vendors表中存儲(chǔ)的值,第二次為轉(zhuǎn)換成大寫(xiě)后的值。
常用的文本處理函數(shù)如下(一下str及Sx均可取表的列名):
Concat(S1,S2,...Sn):連接S1,S2,...Sn為一個(gè)字符串
Insert(str,x,y,instr):將字符串str從第x位置開(kāi)始,y個(gè)字符長(zhǎng)的子串替換為字符串instr
Left(str,x):返回字符串str最左邊的x個(gè)字符
Right(str,x):返回字符串str最右邊的x個(gè)字符
Lower(str):將字符串str中所有字符變?yōu)樾?xiě)
Upper(str):將字符串str中所有字符變?yōu)榇髮?xiě)
Lpad(str,n,padstr):用字符串padstr對(duì)str最左邊進(jìn)行填充,直到str長(zhǎng)度為n個(gè)字符長(zhǎng)度
Rpad(str,n,padstr):用字符串padstr對(duì)str最右邊進(jìn)行填充,直到str長(zhǎng)度為n個(gè)字符長(zhǎng)度
Ltrim(str):去掉字符串左側(cè)的空格
Rtrim(str):去掉字符串右側(cè)的空格
Repeat(str,x):返回str重復(fù)x的次數(shù)
Replace(str,a,b):用字符串b替換字符串str中所有出現(xiàn)的字符串a(chǎn)
Strcmp(s1,s2):比較字符串s1和s2
Trim(str):去掉字符串行尾和行頭的空格
Substring(str,x,y):返回從字符串str x位置起y個(gè)字符長(zhǎng)度的子串
Locate(str,x):找出str字符串的x子字符串(可以與count()結(jié)合使用)
Soundex():返回串的SOUNDEX值
其中Soundex需要做進(jìn)一步解釋?zhuān)?/p>
soundex是一個(gè)將任何文本串轉(zhuǎn)換為描述其語(yǔ)音表示的字母數(shù)字模式的算法。soundex考慮了類(lèi)似的發(fā)音字符和音節(jié),使得能對(duì)串進(jìn)行發(fā)音比較而不是字母比較。
使用例子如下:
customers表中有一個(gè)顧客Coyote Inc.,其聯(lián)系名為Y.Lee。但是如果輸入錯(cuò)誤,此聯(lián)系名實(shí)際為Y.Lie,怎么辦,顯然按正確吧聯(lián)系名搜索不會(huì)返回?cái)?shù)據(jù),如下所示:

現(xiàn)在使用soundex函數(shù)進(jìn)行搜索,結(jié)果如下:

在這個(gè)例子中,where子句使用soundex()函數(shù)來(lái)轉(zhuǎn)換cust_contact列值和搜索串為他們的soundex值,因?yàn)閅.Lee和Y.Lie發(fā)音相似,所以他們的soundex值匹配,因此where子句正確的過(guò)濾出了所需的數(shù)據(jù)。
2.2、日期和時(shí)間處理函數(shù)
日期和時(shí)間采用相應(yīng)的數(shù)據(jù)類(lèi)型和特殊的格式存儲(chǔ),以便能快速和有效的排序或過(guò)濾,并節(jié)省物理存儲(chǔ)空間。
一般應(yīng)用程序不使用用來(lái)存儲(chǔ)日期和時(shí)間的格式,因此日期和時(shí)間函數(shù)總是被用來(lái)讀取、統(tǒng)計(jì)和處理這些值。由于這個(gè)原因,日期和時(shí)間函數(shù)在MySQL語(yǔ)言中具有重要的作用。
常用的日期和時(shí)間處理函數(shù):
AddDate():增加一個(gè)日期(天、周等)
AddTime():增加一個(gè)時(shí)間(時(shí)、分等)
CurDate():返回當(dāng)前日期
CurTime():返回當(dāng)前時(shí)間
Date():返回日期時(shí)間的日期部分
DateDiff():計(jì)算兩個(gè) 日期之差
Date_add():高度靈活的日期運(yùn)算函數(shù)
DateFormat():返回一個(gè)格式化的日期函數(shù)或者時(shí)間串
Day():返回一個(gè)日期的天數(shù)部分
DayOfWeek():對(duì)于一個(gè)日期,返回對(duì)應(yīng)的星期幾
Hour():返回一個(gè)時(shí)間的小時(shí)部分
Minute():返回一個(gè)時(shí)間的分鐘部分
Month():返回一個(gè)日期的月部分
Now():返回當(dāng)前日期和時(shí)間
Second():返回一個(gè)時(shí)間的秒部分
Time():返回一個(gè)日期時(shí)間的時(shí)間部分
Year():返回一個(gè)日期的年部分
2.3、數(shù)值處理函數(shù)
常用的數(shù)值處理函數(shù):
Abs():返回一個(gè)數(shù)的絕對(duì)值
Cos():返回一個(gè)角度的余弦
Exp():返回一個(gè)數(shù)的指數(shù)值
Mod():返回除操作余數(shù)
Pi():返回圓周率
Rand():返回一個(gè)隨機(jī)數(shù)
Sin():返回一個(gè)角度的正弦
Sqrt():返回一個(gè)數(shù)的平方根
Tan():返回一個(gè)角的正切
**********書(shū)山有路,學(xué)海無(wú)涯,無(wú)數(shù)個(gè)孤獨(dú)的夜晚,需要一點(diǎn)小小的成就感!**********