數據庫函數
mysql 數據庫中爲我們提供了一些常用的函數
mysql 中的函數不同於C語言中的函數, mysql 中的函數只用於數據處理,不會進行命令操作
函數使用規則
函數由於不進行命令操作,只進行數據處理,通常是通過 select語句進行輸出的高級語言都有自己的庫函數,數據庫也不例外,在數據庫中也提供了一些用於實現特定功能的函數。
聚合函數
在數據庫函數中,聚合函數是我們最常用的一類。所謂的聚合,就是對一組值進行組合計算,返回單個值。
1.count
計數函數,對元組或者屬性計數。
一般格式:count(屬性名)。
select count() from <表名>;
是對整個表的元組進行計數
select count(屬性名) from 表名 where 條件表達式;
count 支持條件計數,只計算有效值,不計算null值
2.max
求最大值函數,查詢字段中的最大的數。
一般格式:max(屬性名)
select max(屬性名) from 表名 [where 條件表達式];
3.min
求最小值函數,查詢字段中的最小的數。
一般格式:min(屬性名)
select min(屬性名) from 表名 [where 條件表達式];
4.avg
求平均值函數,查詢字段中所有數的平均值。
一般格式:avg(屬性名)
select avg(屬性名) from 表名 [where 條件表達式];
5.sum
求和函數,查詢屬性中所有數的和。
一般格式:sum(屬性名)
select sum(屬性名) from 表名 [where 條件表達式];
除了通過函數計算還能直接用運算符計算
select 屬性名1*2,屬性名2+屬性名3 from 表名;
數學函數
1.abs
返回X的絕對值
格式: abs(x)
select abs(-10),abs(12);
2.round
四捨五入函數。
一般格式:round(數值類型[,精確位數]);
select round(1234.56);
不加精確位數默認精確到整數位
select round(123.456,2);
加上精確位數就保留多少位小數
3.MOD
mod(a,b) a除以b的餘數
4.rand
獲取隨機數,隨機數的範圍在0~1之間,生成小於1的浮點小數
生成範圍在0~9之間的數據
select rand()*10;
格式: rand()
三角函數
三角函數中的 正弦 函數
sin30度shi 2/1
格式: sin(radin)
注意: radin 是弧度制,而不是角度
## 弧度轉角度公式
#PI == 180
radin=PI/180*angle;
除此之外還有其他的三角函數
cos(radin) 餘弦
tan(radin) 正切
ctan(radin) 餘切
1.PI
數據庫提供了直接獲取 PI 值的函數
PI() 求圓周率
2.power
求次方函數
一般格式:power(底數,指數);
select power(2,3); # 求2的3次方的值
可以用pow函數代替power函數
select pow(2,3);
求次方根(開方)
pow(9,1/2); pow(4,0.5) #只需要把指數改一下
日期時間函數
直接從系統獲取日期和時間,不需要通過表格獲取
1.now
求當前的日期和時間。
一般格式:now()。
select now();
返回一個 datetime 類型的數據
2.date
求出日期的格式的函數
一般格式:date(日期時間類型的屬性名)。
select date(birthday) from student;
3.time
求時間函數的格式的函數。
一般格式:time(日期時間類型的屬性名)
select time(birthday) from student;
4.date_format
時間日期類型轉字符串類型函數。
一般格式: date_format(日期時間類型,格式字符串)
/*
%Y 年 %y 年(保留後2位)
%M 月份英文單詞 %m 數字月份
%d 日期 #D 數字th
%H 時(24小時制) %h 12時制
%i 分
%s 秒
*/
select date_format(now(),'%Y%m%d:%H%i%s');
注意:大小寫格式會有不一樣的輸出
字符處理函數
1.upper
小寫字母轉大寫字母函數。
一般格式:upper(字符型屬性名);
select upper('abc');
也可用 ucase() 函數代替 select ucase(‘abc’);
2.lower
大寫字母轉小寫字母函數。
一般格式:lower(字符型屬性名);
select upper('ABC');
也可用 lcase 函數代替,如: select lcase(‘ABC’);
3.substring
提取字串函數,以給定的參數求字符串中的一個子串。
mysql 中,字符串數據下標從1開始
格式: substring(字符串,start,length);
## 要被提取的字符串
## start 開始提取的位置
## end 提取的數量
subsring("string",start,end);
從字符串中第start個字符開始取出長度爲length的字符串。
select substring('abc123@#$',4,3);# 結果爲123
也可以用mid函數代替,如: select mid(‘abc123@#$’,4,3);
4.concat
字符串拼接函數
格式: concat(字符串,字符串....)
char_length() 求字符串長度
5.insert
字符串 string2 替換 string1 的 x 位置開始長度爲 len 的字符串
/*
string1 準備替換的字符串
x 開始位置
len 替換的長度 如果是0,就是從該位置進行插入
string2 替換的字符串
*/
insert(string1,x,len,string2)
6.locate
從字符串 s 中獲取 s1 的開始位置
locate(substr,str) :返回子串 substr 在字符串 str 第一個出現的位置,如果 substr 不是在 str`裏面,返回0
locate(s1,s)
7.length
length(string) :返回字符串 string 的長度。
8.ASCII
ASCII( str )
返回字符串 str 字符中的ASCII代碼值。如果 str 是空字符串,返回0。
如果 str 是NULL,返回NULL。
select ASCII('a');
注意:只能顯示一個字符的 ASCII 碼值
高級函數
1.md5
不可逆的加密驗證函數
2.bin
bin(x) 返回二進制編碼
3.binary
binary(s) 將字符串 s 轉換爲二進制字符串
4.database
返回當前數據庫名
分組查詢
對查詢結果進行分組。
分組關鍵字:group by
一般格式:
select 屬性名1,屬性名2,…,屬性名n
from 表名 group by 屬性名(1~n) [having 條件表達式];
注意:分組過後不能用where進行條件篩選,需要用having
where:從數據源去掉不符合搜索條件的數據
having:在分好的組中去掉每組不符合條件的數據