Mysql第十一章數(shù)據(jù)處理函數(shù)

同大多數(shù)計(jì)算機(jī)語言一樣核偿,SQL支持利用函數(shù)來處理數(shù)據(jù)壹士。函數(shù)一般是在數(shù)據(jù)上執(zhí)行的筑公,它給數(shù)據(jù)的轉(zhuǎn)換和處理提供了方便颓鲜。
注意點(diǎn):

函數(shù)沒有SQL的可移植性強(qiáng) 能運(yùn)行在多個系統(tǒng)上的代碼稱為可移植的(portable)一铅。相對來說陕贮,多數(shù)SQL語句是可移植的,在SQL實(shí)現(xiàn)之間有差異時(shí)潘飘,這些差異通常不那么難處理肮之。而函數(shù)的可移植性卻不強(qiáng)。幾乎每種主要的DBMS的實(shí)現(xiàn)都支持其他實(shí)現(xiàn)不支持的函數(shù)卜录,而且有時(shí)差異還很大戈擒。 為了代碼的可移植,許多SQL程序員不贊成使用特殊實(shí)現(xiàn)的功能艰毒。雖然這樣做很有好處筐高,但不總是利于應(yīng)用程序的性能。如果不使用這些函數(shù)现喳,編寫某些應(yīng)用程序代碼會很艱難凯傲。必須利用其他方法來實(shí)現(xiàn)DBMS非常有效地完成的工作。 如果你決定使用函數(shù)嗦篱,應(yīng)該保證做好代碼注釋冰单,以便以后你(或其他人)能確切地知道所編寫SQL代碼的含義。

使用函數(shù)

文本處理函數(shù)
  • Upper()函數(shù) 將文本轉(zhuǎn)換為大寫
    輸入:SELECT UPPER('aaa')
    輸出:


    image.png
常用的文本處理函數(shù)
函數(shù) 說明 舉例
left(str,num) 返回錯左邊的字符 SELECT LEFT('AABBCCDD',2)
length() 返回串的長度 SELECT LENGTH('AABBCCDDEEFFGG')
locate() 返回串的子串 select LOCATE('aa','AABBccaa',2)
lower() 將串轉(zhuǎn)換為小寫 SELECT LOWER('AABBCCDD')
UPPER() 將串轉(zhuǎn)換為大寫 SELECT UPPER('aaa')
LTRim() 去掉串左邊的空格
RTrim() 去掉串右邊的空格
Trim() 去掉串兩邊的空格
日期和時(shí)間處理函數(shù)
函數(shù) 說明 舉例
CURDATE() 返回當(dāng)前日期 select CURDATE()
CURTIME() 返回當(dāng)前時(shí)間 select CURTIME()
Now() 返回當(dāng)前日期和時(shí)間
Date() 返回日期時(shí)間的日期部分 select Date('2023-08-07 00:00:00')
DAY() 返回一個日期的天數(shù)部分 select DAY('2023-08-07 00:00:00')
DayOfWeek() 對于一個日期灸促,返回對應(yīng)的星期幾
Month() 返回一個日期的月份部分
Hour() 返回一個時(shí)間的小時(shí)部分
Minute() 返回一個時(shí)間的分鐘部分
Second() 返回一個時(shí)間的秒部分
DateDiff() 計(jì)算兩個日期之差 select DateDiff('2023-08-07 00:00:00','2023-08-15 00:00:00')
Date_Add() 高度靈活的日期運(yùn)算函數(shù) SELECT DATE_ADD('2023-01-01', INTERVAL 2 MONTH 3 DAY);
Now() 返回當(dāng)前日期和時(shí)間
Time() 返回一個日期時(shí)間的時(shí)間部分
Year() 返回一個日期的年份部分
舉例:
  • 輸入:select * from order where order_date='2005-09-01'
  • 輸出:
    image.png

分析: 使用WHERE order_date = '2005-09-01'可靠嗎诫欠?order_ date的數(shù)據(jù)類型為datetime涵卵。這種類型存儲日期及時(shí)間值。樣例表中的值全都具有時(shí)間值00:00:00荒叼,但實(shí)際中很可能并不總是這樣轿偎。如果用當(dāng)前日期和時(shí)間存儲訂單日期(因此你不僅知道訂單日期,還知道下訂單當(dāng)天的時(shí)間)被廓,怎么辦坏晦?比如,存儲的order_date值為
2005-09-01 11:30:05嫁乘,則WHERE order_date = '2005-09-01'失敗昆婿。即使給出具有該日期的一行,也不會把它檢索出來蜓斧,因?yàn)閃HERE匹配失敗仓蛆。解決辦法是指示MySQL僅將給出的日期與列中的日期部分進(jìn)行比較,而不是將給出的日期與整個列值進(jìn)行比較挎春。為此看疙,必須使用Date()函數(shù)

  • 輸入:select * from order where date(order_date)='2005-09-01'
  • 輸出:
    image.png

分析:使用Date()是一個良好的習(xí)慣,即使你知道相應(yīng)的列只包含日期也是如此直奋。這樣能庆,如果由于某種原因表中以后有日期和時(shí)間值,你的SQL代碼也不用改變帮碰。當(dāng)然相味,也存在一個Time()函數(shù)拾积,在你只想要時(shí)間時(shí)應(yīng)該使用它殉挽。

  • 輸入:select * from order where Year(order_date)='2005' and Month(order_date)=9

分析: Year()是一個從日期(或日期時(shí)間)中返回年份的函數(shù)。類似拓巧,Month()從日期中返回月份斯碌。因此,WHEREYear(order_date)= 2005 AND Month(order_date) = 9檢索出order_date為2005年9月的所有行肛度。

數(shù)值處理函數(shù)

函數(shù) 說明
Abs() 返回一個數(shù)的絕對值
Cos() 返回一個角度的余弦
Exp() 返回一個數(shù)的指數(shù)值
Mod() 返回除操作的余數(shù)
Pi() 返回圓周率
Rand() 返回一個隨機(jī)數(shù)
Sin() 返回一個角度的正弦
Sqrt() 返回一個數(shù)的平方根
Tan() 返回一個角度的正切
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傻唾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子承耿,更是在濱河造成了極大的恐慌冠骄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件加袋,死亡現(xiàn)場離奇詭異凛辣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)职烧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門扁誓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來防泵,“玉大人,你說我怎么就攤上這事蝗敢〗菖ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵寿谴,是天一觀的道長锁右。 經(jīng)常有香客問我,道長讶泰,這世上最難降的妖魔是什么骡湖? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮峻厚,結(jié)果婚禮上响蕴,老公的妹妹穿的比我還像新娘。我一直安慰自己惠桃,他們只是感情好浦夷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辜王,像睡著了一般劈狐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呐馆,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天肥缔,我揣著相機(jī)與錄音,去河邊找鬼汹来。 笑死续膳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的收班。 我是一名探鬼主播坟岔,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摔桦!你這毒婦竟也來了社付?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邻耕,失蹤者是張志新(化名)和其女友劉穎鸥咖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兄世,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啼辣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碘饼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熙兔。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悲伶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出住涉,到底是詐尸還是另有隱情麸锉,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布舆声,位于F島的核電站花沉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏媳握。R本人自食惡果不足惜碱屁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛾找。 院中可真熱鬧娩脾,春花似錦、人聲如沸打毛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幻枉。三九已至碰声,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熬甫,已是汗流浹背胰挑。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椿肩,地道東北人瞻颂。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像覆旱,于是被迫代替她去往敵國和親蘸朋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容