算術運算符是SQL中最基本的運算符,MySQL自然不能缺少對其的支持。
既然其名稱中有「算術」二字,給人的第一感覺當然是支持數字型的運算。所以我們先從數字著手了解它。
【1】建表
我的習慣一直是以案例作為學習的切入點。建一個數據表是第一步:
CREATE TABLE `num_oper01` ( `a` int(11) DEFAULT NULL, `b` float DEFAULT NULL, `c` decimal(18,2) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
【2】數據準備
insert into num_oper01 values(3,3,3);insert into num_oper01 values(3,3.45,3.4);
結論:從select的結果可以看到,int永遠是以不帶小數位的整數存在,float則根據實際情況調整,而decimal則永遠按定義的小數位形式顯示。
【3】數字的加減乘除
select a,b,c,a+1.2,b+1.2,c+1.2 from num_oper01;select a,b,c,a-1.2,b-1.2,c-1.2 from num_oper01;select a,b,c,a*1.2,b*1.2,c*1.2 from num_oper01;select a,b,c,a/1.2,b/1.2,c/1.2 from num_oper01;
結論:
MySQL會自動進行數據類型切換;切換的順序是:INT --> FLOAT --> DECIMALMySQL會根據計算結果自動增加小數位數。再來單獨看看取餘的計算效果:
從執行效果可以看出:
INT與DECIMAL的取餘還是INT與DECIMAL;FLOAT取餘就超出我們的理解;結論:取餘就是整數的一種概念,不要對小數有所謂取餘的想法。
最後我們當然不能忘記驗證被0除的結果。
還好MySQL沒給我們驚喜,涉及到算術運算,除數不能為0這個定理沒被打破,只是返回的是NULL而非報錯中斷程序執行。
【4】字符串中的數字
先給出自己測試出的結論吧:
在MySQL當中,字符串類型間進行加減乘除運算的時候,會截取字符串以數字開頭的那一部分數字進行運算,如果字符串前面沒有數字,那麼就只能截取的數值為0,那麼進行加減的時候結果都是0,進行乘除的時候結果都是NULL。
看案例慢慢去理解。
select '1a'+'1b','15e'-'4'b,'15e'/'4b','2r'*'3s','r'/'s','2019-12-08'-'2019-12-08';
總結
算術運算符有加減乘除及取餘5種;算術運算符不僅可以應用在數字,還可以應用於從字符串中抽取的數字。所以,學習不能把自己的思維固化。