说到函数,就必须知道其本质是什么,在MySQL中,函数是指一段可以直接被另一段程序调用的程序或代码。

- 字符串连接函数:
- select concat(传入参数1,传入参数2,……)
实际操作:
- # 传入参数为多个字符串,会将多个字符串连接起来
- select concat('Yang ','Hai ','tao');
- -- Yang Hai Tao
- # 将传入参数中的大写字母,全部转换为小写字母
- select lower(传入参数)
实际操作:
- # 将大写转换为小写
- select lower('HelL0');
- -- hello
- # 将传入参数中的小写字母转换为大写字母
- select upper(传入参数)
实际操作:
- # 将小写转换为大写
- select upper('hello');
- -- HELLO
左填充,用(传入参数3)对(传入参数1)的左边进行填充,从而字符串最终的长度为n
- # 左填充,用(传入参数3)对(传入参数1)的左边进行填充,从而字符串最终的长度为n
- -- 注意,n指的是最终字符串的长度
- select lpad(传入参数1,n,传入参数3);
实际操作:
- # 左填充,用(传入参数3)对(传入参数1)的左边进行填充,从而字符串最终的长度为n
- -- 注意,n指的是最终字符串的长度
- select lpad('g',4,'yan');
- -- yang
- # 右填充,用(传入参数3)对(传入参数1)的右边进行填充,从而字符串最终的长度为n
- select rpad(传入参数1,n,传入参数3);
实际操作:
- # 右填充,用(传入参数3)对(传入参数1)的右边进行填充,从而字符串最终的长度为n
- select rpad('yan',4,'g');
- -- yang
- # 去掉字符串头部和尾部的空格
- -- 注:传入参数头部、中间、尾部都有空格,但trim函数,只对头部和尾部的空格生效
- select trim('传入参数');
实际操作:
- # 去掉字符串头部和尾部的空格
- -- 注:传入参数头部、中间、尾部都有空格,但trim函数,只对头部和尾部的空格生效
- select trim(' Yang hai tao ');
- -- Yang hai tao
- # 返回传入m从start位置起的len个长度的字符串
- -- start=数字m,代表从第几个字符开始
- select substring('YangHaiTao',m,len);
实际操作:
- # 返回传入参数1从start位置起的len个长度的字符串
- -- start=数字,代表从第几个字符开始
- select substring('YangHaiTao',1,4);
- -- Yang

- 向上取整数
- select ceil(传入参数);
实际操作:
传入参数等于1.5,向上取整数,代表大于1.5的最小整数
- # 向上取整:
- select ceil(1.5);
- -- 2
- 向下取整数
- select floor(传入参数);
实际操作:
传入参数为1.5,向下取整数,即为求不大于1.5的最小整数
- # 向下取整:
- select floor(1.5);
- -- 1
- # 取模:
- select mod(传入参数x,传入参数y);

实际操作:
- # 取模:
- select mod(5,3);
- -- 2;5-3*[5/3]=5-3*1=2
- # 返回一个0~1内的随机数:
- select rand();
实际操作:
- # 返回一个0~1内的随机数:
- select rand();
- -- 0.39300280846003705
- # 求参数x四舍五入的值,保留y位小数:
- 传入参数1:小数
- 小数点后保留n位
- select round(传入参数1,n);
实际操作:
- # 求参数x四舍五入的值,保留y位小数:
- select round(2.3453223,3);
- -- 2.345
通过数据库函数,生成一个六位数的随机验证码。
-- 第一步:先调用rand函数,生成0~1之间的随机小数,再将其乘以1000000
-- 第二步:再调用round函数,将传入数字进行四舍五入,小数点后保留零位
-- 第三步:为了避免第一步生成的随机小数十分位为0,所以调用字符串函数lpad,将长度设置为6,从左边开始补位(补0)
-- 第四步:输出六位随机验证码
select lpad(round(rand()*1000000,0),6,0);


- /*返回当前日期*/
- select curdate();
- -- 2023-09-06 4
- /*返回当前时间*/
- select curtime();
- -- 17:25:29
- /*返回当前日期和时间*/
- select now();
- -- 2023-09-06 17:28:23
- /*获得指定date的年份*/
- select year(now());
- -- 2023
- /*获得指定date的月份*/
- select month(now());
- -- 9
- /*获得指定date的日期*/
- select day(now());
- -- 6
- /*返回一个日期,其时间值加上一个时间间隔expr后的时间值*/
- select date_add(now(),interval 70 day);
- -- 2023-11-15 17:37:25
- /*求两个指定时间之间相差的天数*/
- select datediff('2022-01-02','2021-10-02');
- -- 92

如果传入参数1为True,则返回传入参数2,否则返回传入参数3
- # if(传入参数1,传入参数2,传入参数3)
- # 如果传入参数1为True,则返回传入参数2,否则返回传入参数3
- select if(true,'ok','Error');
- -- ok
如果传入参数1不为null,则输出传入参数1,如果为null,则输出传入参数2
- # ifnull(传入参数1,传入参数2)
- select ifnull('ok','Error');
- -- ok
- select ifnull(null,'Error');
- -- Error
如果传入参数1等于‘a’,那么输出‘b’,如果传入参数不等于‘a’,那么输出‘c’,其中when和then可以叠加。
- # case 传入参数1 when ’a‘ then 'b' else 'c' end
- # 如果传入参数1等于‘a’,那么输出‘b’,如果传入参数不等于‘a’,那么输出‘c’,其中when和then可以叠加
- select
- number,
- name,
- case place
- when '北京' then '一线城市'
- when '上海' then '一线城市'
- else '二线城市' end
- from
- people;

给case传入参数1,如果传入参数1等于m,则返回n,如果传入参数1不等于m,则返回x;
select case 'jom' when 'jom' then 'kom' else 'JOM' end;