常见函数
分类:
1、单行函数: 如:concat、length、ifnull等
2、分组函数 功能: 用作统计作用 分类: sum 求和、avg 平均数、 max 最大值、min 最小值、count 计算个数
一、单行函数
1、 字符函数
# 1、length 获取字节数
SELECT LENGTH('zhangsan');
# 2、concat 拼接字符串
SELECT CONCAT(last_name, first_name) FROM empolyees;
# 3、upper、lower
SELECT UPPER('zhangsan');
SELECT LOWER('SZHANGAS');
SELECT CONCAT(UPPER(first_name), LOWER(last_name)) FROM empolyees;
# 4、substr、substring 注意: 索引是从1开始
SELECT SUBSTR('李莫愁与陆展元', 5);
SELECT SUBSTR('李莫愁与陆展元', 4, 3) test;
SELECT SUBSTRING('李莫愁与陆展元', 4, 3) test;
# 5、instr 返回当前字符串出现的索引
SELECT INSTR('李莫愁与陆展元', '陆展元') test;
# 6、trim 去除前后字符
SELECT LENGTH(TRIM(' 张三 '));
SELECT TRIM('a' FROM 'aaaaaaaaaaa张aaaaaaaaaaaaa三aaaaaaaaaaa') AS aut;
# 7、lpad 用指定字符左填充
SELECT LPAD('卡戴珊', 10, '*') AS ka;
# 8、rpad 用指定字符右填充
SELECT RPAD('卡戴珊', 10, '*') AS ka;
# 9、replace
SELECT REPLACE('我是张三丰', '张三丰', '校长') AS test;
2、 数学函数
# round 四舍五入 (默认整数,第二个是保留小数点)
SELECT ROUND(1.566, 2);
# ceil 向上取整
SELECT CEIL(2.55);
# floor 向下取整
SELECT FLOOR(2.55);
# truncate 截断
SELECT TRUNCATE(1.55, 1);
# mod 取余
SELECT MOD(25, 3);
3、日期函数
# now 返回现在的时间
SELECT NOW();
# curdate 返回当前系统日期
SELECT CURDATE();
# curtime 返回当前的时间
SELECT CURTIME();
# 可以获取指定的部分
SELECT YEAR(NOW());
SELECT YEAR('2015/5/6');
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());
SELECT DAY(NOW());
SELECT DAYNAME(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());
# str_to_date 将字符通过指定的格式转成日期
SELECT STR_TO_DATE('4-5-2015', '%m-%d-%Y');
# 查询日期为 --- 员工信息
SELECT * FROM empolyees WHERE `hiredate` = '2018-02-01';
SELECT * FROM empolyees WHERE `hiredate` = STR_TO_DATE('2-1-2018', '%m-%d-%Y');
# date_format: 将日期转换成字符
SELECT DATE_FORMAT('2018-05-05', '%Y年%m月%d日');
# DATEDIFF() 两个日期相减
SELECT DATEDIFF('2015-05-10', '2015-05-04');
# TIMEDIFF 两个时间相减
SELECT TIMEDIFF('2015-05-10 15:30:20', '2015-05-10 11:30:20');
# monthname: 返回英文月
SELECT MONTHNAME('2015-05-10');
#dayname: 返回英文日
SELECT DAYNAME('2015-05-15');
4、其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
5、流程控制函数
# 1、if 函数
SELECT IF(10>5, '大', '小');
SELECT
last_name,
commission_pat,
IF(
commission_pat IS NULL,
'没奖金',
'有奖金'
)
FROM
empolyees;
# 2、case 函数 使用一
/*
switch(a) {
case 1:... break;
default: ... break;
}
mysql 中:
case 要判断的字段或者表达式
when 常量1 then 要显示的值1 或语句1
when 常量2 then 要显示的值2 或语句2
...
else 要显示 的值n或者语句n;
end
*/
/*
# 案例 查询员工的工资 : 要求
部门号=2, 显示的工资为1.1倍
部门号=3, 显示的工资为1.3倍
部门号=5, 显示的工资为1.5倍
其他部门,不变
*/
SELECT
salay 原始工资,
departmanet_id,
CASE
departmanet_id
WHEN 2
THEN salay * 1.1
WHEN 3
THEN salay * 1.3
WHEN 5
THEN salay * 1.5
ELSE salay
END AS 新工资
FROM
empolyees;
# 3、case 函数的使用二。类似于多重if
/*
case
when 条件一 then ...
when 条件二 then ...
else ...
end
*/
# 案例: 查询员工的工资情况
/*
如果工资> 400000, 显示A 级别
如果工资> 300000, 显示B 级别
如果工资> 200000, 显示C 级别
否则显示D 级别
*/
SELECT
salay,
CASE
WHEN salay > 400000
THEN 'A'
WHEN salay > 300000
THEN 'B'
WHEN salay > 200000
THEN 'C'
ELSE 'D'
END
AS 级别
FROM
empolyees;
二、分组函数
/**
功能: 用作统计作用
分类: sum 求和、avg 平均数、 max 最大值、min 最小值、count 计算个数
*/
SELECT
SUM(salay)
FROM
empolyees;
SELECT ROUND(AVG(salay), 2) FROM empolyees;