Mysql常用运算符与函数汇总
我们先把数据表建好
usetest; createtable`employee`( emp_nointunsigned, emp_namevarchar(30), emp_sexvarchar(3), emp_agetinyintunsigned, saldouble, historydatetime ); insertintoemployeevalues(1,'张三','男',18,5000,'2012-04-23'), (2,'李四','男',27,4500,'2013-05-23'), (3,'王五','男',23,4700,'2012-04-21'), (4,'子龙','男',19,3800,'2011-03-04'), (5,'李白','男',15,6200,'2015-09-09'), (6,'刘备','男',28,2500,'2016-02-11'), (7,'吕布','男',21,6000,'2010-10-18'), (8,'尚香','女',16,4500,'2011-09-26'), (9,'小乔','女',15,null,'2013-07-05'), (10,'大乔','女',16,5000,'2017-09-01');
常用的运算符:
1:等于(=)
select*fromemployeewheresal=3800; select*fromemployeewheresal=null;--这里查询不到为null的数据
2:等于(<=>)
select*fromemployeewheresal<=>3800; select*fromemployeewheresal<=>null;--这里可以查询到为null的数据
3:is判断(null)
select*fromemployeewheresalisnull; select*fromemployeewheresalisnotnull;
4:null值判断还可以使用isnull();
select*fromemployeewhereisnull(sal); select*fromemployeewhere!isnull(sal);
5:在区间(between)内 betweenminandmax ps:这里是一个闭区间
select*fromemployeewheresalbetween4500and5000;
6:不在区间内
select*fromemployeewheresalnotbetween4500and5000; --null不为包括进去
7:and和or
select*fromemployeewheresalnotbetween4500and5000orsalisnull; select*fromemployeewheresal=4500andemp_sex='女';
8:小于(<),大于(>),小于等于(<=),大于等于(>=)
select*fromemployeewheresal>=4500;
***************************************************************************************************************
数学函数
1:rand();
selectrand()fromdual;--dual是一个伪表 select1+1fromdual; selectrand();--可以简写
2:least(value1,value2,...)返回最小值
selectleast(54,76,4,65,76,87,87,56,65,654,45,23,1,76); selectleast(54,76,4,65,76,87,87,56,65,654,45,23,1,76)asmin_value;--列名可以起一个别名
3:greatest(value1,value2,...)返回最大值
selectgreatest(54,76,4,65,76,87,87,56,65,654,45,23,1,76);
4:round(M,D);返回M的四舍五入的值,D表示要保留几们小数,默认值是0
selectround(1.69); selectround(1.69,1);
5:abs()绝对值
select5-10; selectabs(5-10);
***************************************************************************************************************
汇总函数
1:avg();
select*fromemployeewheresal>=6000; selectavg(sal)fromemployeewheresal>=6000;
2:count()
selectcount(*)fromemployee; selectcount(emp_name)fromemployee; selectcount(sal)fromemployee;--打印9这里会忽略null值 selectcount(*)fromemployeewheresal>=4000; selectcount(*)fromemployeewheresal<=4000orsalisnull;
3:sum()
selectsum(sal)fromemployeewheresal>=6000;
4:min()
selectmin(sal)fromemployee;
5:max()
selectmax(sal)fromemployee;
***************************************************************************************************************
日期函数
1:获取当前的日期时间
selectnow(),sysdate(),current_timestamp(); selectnow(6),sysdate(6),current_timestamp(6); ps:now(),current_timestamp();没有区别,表示sql开始执行时的时间 sysdate()表示这个函数开始时间
2:获取当前日期
selectcurdate(); --只有年月日
3:获取当前时间
selectcurtime(); --只有时分秒
4:日期的加运算date_add
selecthistory,date_add(history,interval'112:10'day_minute)fromemployee;--date_add(history,interval'112:10'day_minute) selecthistory,date_add(history,interval'1-1'year_month)fromemployee;--date_add(history,interval'1-1'year_month) selecthistory,date_add(history,interval'1'second)fromemployee;--date_add(history,interval'1'second)
5:日期的减运算data_sub
selecthistory,date_sub(history,interval'1-1'year_month)fromemployee;
6:计算日期差
selecthistory,sysdate(),datediff(sysdate(),history)fromemployee; --以天数来表示
7:获取日期的指定部分(把日期转换为指定的格式) date_format()
selecthistory,date_format(history,'%Y年%m月%d号')fromemployee; selecthistory,date_format(history,'%d号')fromemployee; selecthistory,date_format(history,'%Y年%m月%d号%H时%i分%s秒')fromemployee;
8:计算出一个日期是星期几
selecthistory,dayname(history)fromemployee;
9:中文日期字符串转换日期str_to_date()
insertintoemployeevalues(11,'张飞','男',22,3000,'2017年02月01号');--报错 insertintoemployeevalues(11,'张飞','男',22,3000,str_to_date('2017年02月01号','%Y年%m月%d号%H时%i分%s秒'));
insertintoemployeevalues(12,'二哥','男',22,3000,str_to_date('2017年02月01号23时02分02秒','%Y年%m月%d号%H时%i分%s秒'));
insertintoemployeevalues(12,'二哥','男',22,3000,str_to_date('2017年02月01号11时02分02秒','%Y年%m月%d号%h时%i分%s秒'));
ps:如果是h则表示12小制,如果是大H则表示24小明制;
字符串函数
1:left(str,len)返回字符串str的左端len个字符
selectleft('abcdefg',5);
2:length()
selectlength('abcdefg');
3:lower(str)返回小写的字符串str
selectlower('HELLO');
4:substring()取子字符串,第二个参数是截取的起始位置,第三个参数是要截取的长度
selectsubstring('helloworld',2,3);
5:concat()字符串拼接
selectconcat(emp_name,'员工')fromemployee;
6:replace(替换
selectreplace(emp_name,'李','老')fromemployeewhereemp_name='李四';