MySQL常见函数
函数: 将某些功能封装到一起,对外提供到一个接口(函数名),通过函数调用的方式可以重复的执行函数里的功能代码从而提高我们的代码的复用性
MySql里自带了很多已经封装好了的函数,可以帮我们实现很多功能,
MySql里调用函数使用函数名(),完整的写法:
select 函数名(实参) from 表名;
一、字符函数:
1、length(str):获取参数的字节数
select length('abcd'); // 返回值:4
select length('数据库abc'); // 返回值:与字符编码类型有关
show variables like '%char%'; //查看数据可客服端字符集编码
GBK:一个汉字占两个字节;UTF-8:一个汉字是占三个字节.
2、concat(str1,str2,...):连接字符串
也可以这样写:concat(str1,concat(str2,str3)):
3、upper(str):小写字母变大写;
4、lower(str):大写字母变小写;
5、substr 和 substring
案例:截取字符串,从第4个字符(包含)开始到最后
select substr('目标字符串',4) ; //注意:Mysql中索引值是从1开始的,java索引是从0开始的.
案例:截取字符串,从第二个开始接到第三个
select substr('目标字符串',2,1); //注意:第一个数字是开始截取的索引值,第二个数数截取的长度
6、.instr('源字符串','子字符串'):作用返回子字符串子源字符串里的起始索引.
select instr('目标字符串','字符串'); //返回结果3, 如果找不到返回0
7、trim(' 有空格的字符串 '):作用是去掉字符串前后的空格,中间空格去不掉
扩展用法:去掉前后两端的其他字符:select trim('a' from 'aaaaa字符aaaaa去掉aaaaa');
8、replace('目标字符串','被替换子串','用于替换的新串')替换
select replace('目标字符串','字符','zifu');
二、数学函数:
1、round() : 四舍五入
select round(1.45);//不管正负数,先将绝对值round,然后加正负号
select round(1.567,2); //表示小数点保留2位
2、ceil(): 向上取整
select ceil(-1.3);
3、floor(): 向下取整
4、truncate(): 截断
select truncate(1.65,1); // 结果保留小数1位:1.6
三、日期函数:
1、now() :返回当前日期时间
select now();
2、curdate() :返回当前系统日期,没有时间部分
3、curtime() :返回当前系统时间,没有日期部分
4、可以单独获取年/月/日
select year(now()); 取得年
select month(now()); 取得月,从从一开始
select day(now()); 取得几号
select hour(now()); 取得小时
select minute(now());取得分钟
select second(now());取得秒数
select monthname(now());取得月名,day hour minute second一样
5、STR_TO_DATE(str,format) :将日期格式的字符转换为制定格式的日期
格式字符串可以包含以字母开头的文字字符和格式说明符%。文字字符 format必须符合字面意思 str。
格式说明符 format必须与日期或时间部分匹配str。有关可以使用format的DATE_FORMAT()说明符
str_to_date('2018-1-12','%y-%m-%d');
6、DATE_FORMAT(date,format) :格式化日期,将日期转换成字符串
date根据format字符串 格式化值。
format字符串中 可以使用以下说明 符。%格式说明符字符前需要该字符
date_format(now(),'%y-%m-%d');
符 | 描述 |
---|---|
%a |
缩写的工作日名称(Sun .. Sat ) |
%b |
缩写的月份名称(Jan .. Dec ) |
%c |
月,数字(0 .. 12 ) |
%D |
这个月的一天,英语后缀(0th , 1st ,2nd , 3rd ,...) |
%d |
每月的某天,数字(00 .. 31 ) |
%e |
每月的某天,数字(0 .. 31 ) |
%f |
微秒(000000 ... 999999 ) |
%H |
小时(00 .. 23 ) |
%h |
小时(01 .. 12 ) |
%I |
小时(01 .. 12 ) |
%i |
分钟,数字(00 .. 59 ) |
%j |
一年中的某一天(001 .. 366 ) |
%k |
小时(0 .. 23 ) |
%l |
小时(1 .. 12 ) |
%M |
月份名称(January .. December ) |
%m |
月,数字(00 .. 12 ) |
%p |
AM 要么 PM |
%r |
时间,12小时(hh:mm:ss 其次是 AM 或PM ) |
%S |
秒(00 ... 59 ) |
%s |
秒(00 ... 59 ) |
%T |
时间,24小时(hh:mm:ss ) |
%U |
周(00 .. 53 ),周日是一周的第一天; WEEK() 模式0 |
%u |
周(00 .. 53 ),周一是一周的第一天; WEEK() 模式1 |
%V |
周(01 .. 53 ),周日是一周的第一天; WEEK() 模式2; 用于 %X |
%v |
周(01 .. 53 ),周一是一周的第一天; WEEK() 模式3; 用于 %x |
%W |
平日名称(Sunday .. Saturday ) |
%w |
星期几(0 =星期日.. 6 =星期六) |
%X |
星期日是星期的第一天的星期,数字,四位数; 用于%V |
%x |
一周的年份,星期一是一周的第一天,数字,四位数; 用于%v |
%Y |
年份,数字,四位数 |
%y |
年份,数字(两位数) |
%% |
文字% 字符 |
% |
x ,对于上面未列出的任何 “ x ” |
四、流程控制函数
1、if函数
select if('10>1','大','小');
2、case函数
语法:
case 要判断的子段或表达式
when case的结果是常量1 then 要显示的值1(或语句1;)
when case的结果是常量2 then 要显示的值2(或语句2;)
......
else case的结果都不前面的时候显示;
end
案例:员工表中, 部门号是30,显示的工资是1.1倍; 部门号是40,显示的工资是1.2倍; 其他显示原工资
SELECT
salary AS 原工资,
department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 50 THEN salary*1.2
ELSE salary
END AS 新工资
FROM employees;
3、多重if
语法:
case
when 条件1 then 要显示的值1(或语句1;)
when 条件2 then 要显示的值2(或语句2;)
......
else 前面的条件都不符合时候显示;
end
案例:
SELECT
salary,
CASE
WHEN salary>20000 THEN 'A级工资'
WHEN salary>10000 THEN 'B级工资'
ELSE 'C级工资'
END AS 工资等级
FROM employees;
五、IFNULL()函数用法
语法: IFNULL(expr1,expr2) :返回一个数字或字符串值
如果expr1不为NULL,返回expr1的值,否则它返回expr2的值。
这里简单整理常用的函数,官方手册包含详细的函数及其他知识点: