1煮嫌、函數(shù)
與其他計算機語言一樣器净,sql支持利用函數(shù)來處理數(shù)據(jù)尖淘。函數(shù)一般是在數(shù)據(jù)上執(zhí)行的,他給數(shù)據(jù)的轉(zhuǎn)換和處理提供了方便倡勇。
*注:函數(shù)沒有sql的可移植性強(不同數(shù)據(jù)庫管理系統(tǒng)的兼容性較差)
2逞刷、使用函數(shù)
大多數(shù)sql實現(xiàn)支持以下函數(shù):
>用于處理文本串的(如刪除或填充值,轉(zhuǎn)換值為大寫或小寫)文本函數(shù)
>用于在數(shù)值數(shù)據(jù)上進(jìn)行算術(shù)操作(如返回絕對值译隘,進(jìn)行代數(shù)運算)的數(shù)值函數(shù)
>用于處理日期和時間值并從中提取特定成分(如:返回兩個日期之差亲桥,檢查日期有效性等)的日期和時間函數(shù)
2.1、文本處理函數(shù)
以Upper()函數(shù)為例:
輸入:
select vend_name, Upper(vend_name) AS vend_name_upcase
from vendors order by vend_name;
輸出:
分析:正如所見固耘,Upper()將文本轉(zhuǎn)換為大寫,因此本例中每個供應(yīng)商都列出兩次词身,第一次為vendors表中存儲的值厅目,第二次為轉(zhuǎn)換成大寫后的值。
常用的文本處理函數(shù)如下(一下str及Sx均可取表的列名):
Concat(S1,S2,...Sn):連接S1,S2,...Sn為一個字符串
Insert(str,x,y,instr):將字符串str從第x位置開始法严,y個字符長的子串替換為字符串instr
Left(str,x):返回字符串str最左邊的x個字符
Right(str,x):返回字符串str最右邊的x個字符
Lower(str):將字符串str中所有字符變?yōu)樾?/p>
Upper(str):將字符串str中所有字符變?yōu)榇髮?/p>
Lpad(str,n,padstr):用字符串padstr對str最左邊進(jìn)行填充损敷,直到str長度為n個字符長度
Rpad(str,n,padstr):用字符串padstr對str最右邊進(jìn)行填充,直到str長度為n個字符長度
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個字符長度的子串
Locate(str,x):找出str字符串的x子字符串(可以與count()結(jié)合使用)
Soundex():返回串的SOUNDEX值
其中Soundex需要做進(jìn)一步解釋:
soundex是一個將任何文本串轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式的算法深啤。soundex考慮了類似的發(fā)音字符和音節(jié)拗馒,使得能對串進(jìn)行發(fā)音比較而不是字母比較。
使用例子如下:
customers表中有一個顧客Coyote Inc.溯街,其聯(lián)系名為Y.Lee诱桂。但是如果輸入錯誤,此聯(lián)系名實際為Y.Lie呈昔,怎么辦挥等,顯然按正確吧聯(lián)系名搜索不會返回數(shù)據(jù),如下所示:
現(xiàn)在使用soundex函數(shù)進(jìn)行搜索堤尾,結(jié)果如下:
在這個例子中肝劲,where子句使用soundex()函數(shù)來轉(zhuǎn)換cust_contact列值和搜索串為他們的soundex值,因為Y.Lee和Y.Lie發(fā)音相似,所以他們的soundex值匹配辞槐,因此where子句正確的過濾出了所需的數(shù)據(jù)掷漱。
2.2、日期和時間處理函數(shù)
日期和時間采用相應(yīng)的數(shù)據(jù)類型和特殊的格式存儲榄檬,以便能快速和有效的排序或過濾切威,并節(jié)省物理存儲空間。
一般應(yīng)用程序不使用用來存儲日期和時間的格式丙号,因此日期和時間函數(shù)總是被用來讀取先朦、統(tǒng)計和處理這些值。由于這個原因犬缨,日期和時間函數(shù)在MySQL語言中具有重要的作用喳魏。
常用的日期和時間處理函數(shù):
AddDate():增加一個日期(天、周等)
AddTime():增加一個時間(時怀薛、分等)
CurDate():返回當(dāng)前日期
CurTime():返回當(dāng)前時間
Date():返回日期時間的日期部分
DateDiff():計算兩個 日期之差
Date_add():高度靈活的日期運算函數(shù)
DateFormat():返回一個格式化的日期函數(shù)或者時間串
Day():返回一個日期的天數(shù)部分
DayOfWeek():對于一個日期刺彩,返回對應(yīng)的星期幾
Hour():返回一個時間的小時部分
Minute():返回一個時間的分鐘部分
Month():返回一個日期的月部分
Now():返回當(dāng)前日期和時間
Second():返回一個時間的秒部分
Time():返回一個日期時間的時間部分
Year():返回一個日期的年部分
2.3、數(shù)值處理函數(shù)
常用的數(shù)值處理函數(shù):
Abs():返回一個數(shù)的絕對值
Cos():返回一個角度的余弦
Exp():返回一個數(shù)的指數(shù)值
Mod():返回除操作余數(shù)
Pi():返回圓周率
Rand():返回一個隨機數(shù)
Sin():返回一個角度的正弦
Sqrt():返回一個數(shù)的平方根
Tan():返回一個角的正切
**********書山有路枝恋,學(xué)海無涯创倔,無數(shù)個孤獨的夜晚,需要一點小小的成就感焚碌!**********