连接数据库
mysql -hlocalhost -uroot -proot
MySQL函数
函数:是指一段可以直接被另一段程序调用的程序或代码。 在MySQL中会有很多的内置函数,我们只需要使用就行;
常见的字符串函数
concat函数
select concat('hello','zhangsan');
返回的是:hellozhangsan
select lower('HELLo');
返回的是:hello
由于企业需求的变更,企业员工的工号统一为8位数,目前不足8位数的全部在前面补上0;
update person set workno = lpad(workno,8,'0')
常见的数值函数
select ceil(1.5); // 向上取整。1.5是2 select floor(1.9);// 向下取整。1 select mod(5,4); // 5除以4,取余数。是1 slect rand(); // 返回0-1之间的数 slect round(2.43,2);// 对2.43四舍五入,保留2位小数
小例子-通过SQL语句生成一个6位数的随机验证码.
select round(rand()*1000000,0); 上面这样写有问题,因为 slect rand()生成的是0-1,可能是0.053111这种的. 我们按照这样补0就不会出问题了。 select lpad(round(rand()*1000000,0),6,'0');
日期函数
当前日期YYYY-MM-DD select curdate(); 返回的是 2023-08-07 当前的时分秒 hh:mm:ss select curtime(); 返回的是 19:52:11 当前的时间YYYY-MM-DD hh:mm:ss select now(); 返回的是 2023-08-07 19:53:28 当前的年份YYYY select year(now()); 返回的是2023 当前的月份M select month(now()); 返回的是8 【当时是8月份】 当前的年份D select day(now()); 返回的是7 【当时是8月7号】 select date_add(now(), interval 70 day); 当前时间加上70天后的时间 2023-10-16 19:59:24 select date_add(now(), interval 70 month); 当前时间加上70个月后的时间 2029-06-07 20:00:19 两个时间相差多少天 select datediff('2023-09-07', '2023-08-07') 输出31天 注意先是结束时间,后面是开始时间
小粒子--查询所有员工的入职天数,并根据入职天数倒序排序
select name, datediff(curdate(), ruzhikey) as 'ruzhitime' from person order by ruzhitime desc; ps:别名在这里可以起到非常大的作用
流程函数
select if(true, 'ok', fail); // 返回的是 fail select ifnull('ok','default'); // 如果第一个值不为null,返回第一个值,如果第一个值是null,返回第二个值 case when [val1] then [res1] ... else [default] end 如果val1为true,返回res1, 否者返回 default 默认值 需求描述:查询person表,员工姓名和工作地址,(如果是北京上线--显示一线城市, 其他显示二线城市) select name (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地点' from person; 需求:成绩>=85优秀; 成绩>= 60 及格;成绩>= 60 及格; select id,name (case when chengji>=85 then '优秀' when chengji >= 60 then '及格' else '不及格' end) '成绩' from 'person'