MySQL函数:函数是指可以直接被另一段程序调用的程序或者代码;函数一般都已经内置;
(1) concat(s1,s2,s3…) 字符串拼接函数,将s1,s2,s3… 拼接成一个字符串;使用逗号分隔;
(2) lower(str) 将字符串str 全部转为小写;
(3) upper(str) 将字符串str 全部转为大写;
(4) lpad(str,n,pad) 左填充,用字符串pad 对str的左边进行填充,直到达到n个字符串的长度;【n:总长度,控制字符串总长度】
(5) rpad(str,n,pad) 右填充,用字符串pad对str的右边进行填充,直到达到n个字符串的长度;【n:总长度,控制字符串总长度】
(6) TRIM(str) 去掉字符串头部和尾部的空格,不去掉中间的空格;
(7) substring(str,start,len) 截取函数:返回字符串str从start位置起的len个长度的字符串;
-- concat() 拼接
select concat('ab','cd','ef');
-- lower() 转小写
select lower('ABCd1');
-- upper() 转大写
select upper('abcD1');
-- lpad()左填充 -- 4123
select lpad('123',4,'456');
-- lpad()左填充 -- aba123 【如果填充后还不够会继续填充】
select lpad('123',6,'ab');
-- rpad()右填充 -- 1234
select rpad('123',4,'456');
-- trim()去除空格
select trim(' 555 ');
-- substring 截取 -- 从第一个字符开始,总共截取3个字符 123
select substring('123456',1,3);
常见的数值函数:
(1) ceil(x) 向上取整; 取整数:5.66 -> 去掉少数点后面的数并加一 6
(2) floor(x) 向下取整;取整数:5.66 -> 去掉少数点后面的数并减一 5
(3) mod(x,y) 返回x/y的模; – 取余
(4) rand() 返回 0~1 内的随机数;
(5) round(x,y) 求参数x的四舍五入的值,保留y位小数;
-- 向上取整 -- 6
select ceil(5.66);
-- 向下取整 -- 5
select floor(5.66);
-- 返回x/y的模 也就是取余函数 5/2 余1 如果y=0 结果为null
select mod(5,2);
-- 返回0~1内的随机数
select rand();
-- 求参数x的四舍五入的值,保留y位小数 -- 5.7
select round(5.66,1);
常见日期函数:
(1) curdate() 返回当前日期;
(2)curtime() 返回当前时间;
(3)now() 返回当前日期和时间;
(4)year(date) 获取指定date的年份;
(5)month(date) 获取指定date的月份;
(6)day(date) 获取指定date的日期;
(7)date_add(date,INTERVAL expr type) 返回上一个日期/时间值加上一个时间间隔expr 后的时间值;【type :可以是年或月或日】
(8)datediff(date1,date2) 返回起始时间date1 和结束时间date2 之间的天数;
-- 当前日期
select curdate();
-- 当前时间
select curtime();
-- 当前日期与时间
select now();
-- 指定date的年份【可以是时间字符串】
select year('2022-09-24 01:12:07');
select year(now());
-- 指定date的月份
select month(now());
-- 指定date的日期
select day(now());
-- 上一个日期/时间值【加上】 一个时间间隔expr后的时间值
-- 当前时间加上3年
select date_add(now(),interval 3 year);
-- 当前时间加上3月
select date_add(now(),interval 3 month);
-- 当前时间加上3天
select date_add(now(),interval 3 day);
-- 返回起始时间和结束时间之间的天数 【前面的参数减去后面的参数】
-- 如果后面的日期大,结果为负数
select datediff(now(),'2022-09-23 01:12:07');
流程函数可以在SQL语句中实现条件筛选,提高语句的效率
常见流程函数:
(1) if(value,t,f) 如果value为true则返回t,否则返回f ;
(2) ifnull(value1,value2) 如果value1 不为空,返回value1,否则返回value2;
(3) case when [val1] then [res1] … else [default] end 如果【val1 为true】,返回res1 …否则返回default默认值;
(4) case [expr] when [val1] then [res1] …else[default] end 如果expr的值等于val1 ,返回res1 … 否则返回的default 默认值;
-- if() -- yes
select if(1=1,'yes','no');
-- ifnull() 判断第一个值是否为null,如果为null 则返回第二个值 -- 5
select ifnull(5,'OK');
-- OK
select ifnull(null,'OK');
-- case ... when ... then ... else ... end
select
case
id when 1 then '第一个id'
else '不是第一个id'
end
from
mysql_test.test_user_new;
-- case when .. then .. else .. end
select
case
when id = 1 then '第一个id'
else '不是第一个id'
end
from
mysql_test.test_user_new;