3--mysql DQL--常见函数

字符函数
1.length 获取参数值的字节个数
	SELECT LENGTH('join');#3
	
    #一个汉字在utf8字符集中占3个字节
	SELECT LENGTH('张三丰');#9
	
	#查看当前数据库字符集
	SHOW VARIABLES LIKE '%char%';

2.concat 拼接字符串
   SELECT CONCAT(last_name,'_',first_name) AS fullName FROM employees;

3.upper,lower
SELECT UPPER('henry');
SELECT LOWER(last_name) FROM employees;

4.substr 、 substring
注:索引从1开始
#截取从指定索引处后面所有字符
SELECT SUBSTR('床前明月光',3);#明月光

#截取从指定索引处指定字符长度的字符
SELECT SUBSTR('床前明月光',2,2);#前明

5. instr  返回字符串第一次出现的索引,找不到就返回0
SELECT INSTR('窗前明月光','明月');#3

6. trim  ①去除字符创首尾的空格  ② 替换字符串首尾的指定字符
SELECT LENGTH(TRIM('     abc      '));//3
SELECT LENGTH(TRIM('   a b c   '));//5
SELECT TRIM('a' FROM 'a窗前明a月a光a');//窗前明a月a光

7.lpad 用指定的字符实现左填充指定长度
SELECT LPAD('bbb',5,'a');#aabbb

8.rpad用指定的字符实现右填充

9.replace  替换
SELECT REPLACE('aaaaabbbbaaaa','a','b');# bbbbbbbbbbb
数学函数
1 round 四舍五入
SELECT ROUND(1.55);#2
SELECT ROUND(1.45);#1
SELECT ROUND(1.456,2);#1.46  小数点后保留2位

2 向上取整,返回>=该参数的最小整数
SELECT CEIL(1.02);# 2
SELECT CEIL(-1.02);# -1

3 floor 向下取整,返回 <= 该参数的最大整数
SELECT FLOOR(1.02);# 1
SELECT FLOOR(-1.02);# -2

4 truncate 截断,截取小数点后的几位,如果是整数则返回原数
SELECT TRUNCATE(1.5999,1); #1.5
SELECT TRUNCATE(1.5999,2); #1.59

5 mod取余
SELECT MOD(4,2);# 0
SELECT MOD(4,3);#1
日期函数
1 now 返回当前系统的日期+时间
SELECT NOW(); # 2020-06-09 07:58:44

2 curdate 返回仓前系统日期,不包含时间
SELECT CURDATE();# 2020-06-09

3 curtime 返回当前时间,不包含日期
SELECT CURTIME();  # 08:01:16

日期格式符:
3--mysql DQL--常见函数_第1张图片

4 year,month,monthname,hour,second 获取指定的部分日期
SELECT YEAR(NOW());# 2020
SELECT YEAR('1988-05-26');# 1988
SELECT MONTH(NOW());# 6
SELECT MONTHNAME(NOW());# June
SELECT HOUR(NOW());# 8
SELECT MINUTE(NOW());# 6
SELECT SECOND(NOW()); # 19

5 str_to_date 将字符串通过指定格式转化成日期
SELECT STR_TO_DATE('1993-02-25','%Y-%c-%d') AS output;# 1993-02-25

6 date_format 将日期转换成字符串
SELECT  DATE_FORMAT(NOW(),'%Y-%m-%d') AS output;# 2020-06-09

其它函数
SELECT VERSION();//获取当前数据库版本
SELECT DATABASE();//获取当前所在数据库
SELECT USER();//获取连接当前数据库的用户
流程控制函数
# 1 if函数:if else 效果
SELECT IF(10>5,'10','5');
SELECT last_name,commission_pct ,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,哈哈') 是否有奖金 FROM employees;

# 2 case 语句
语法1:
case  要判断的字段或表达式
when  常量1  then  要显示的值或语句1;
when  常量2  then  要显示的值2或语句2;
....
else 要显示的值n或语句n;
end ...;

#查询员工工资,要求,部门号30显示工资为1.1倍,部门号40显示工资的1.2倍,部门号50,显示工资的1.3倍
SELECT salary 原工资,department_id,
CASE department_id 
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资 
FROM employees;

语法2:和1的区别是when后面不是常量而是表达式
case  要判断的字段或表达式
when  条件1  then  要显示的值或语句1;
when  条件2  then  要显示的值2或语句2;
....
else 要显示的值n或语句n;
end ...;
SELECT salary,
CASE salary
WHEN salary>20000 THEN 'a'
WHEN salary>15000 THEN 'b'
WHEN salary>10000 THEN 'c'
ELSE 'D'
END AS 工资等级 
FROM employees;
分组函数

分类:sum求和,avg平均值,max最大值,min最小值,count计算个数
特点:
1.sum avg一般用于处理数值型,max,min,cout可以处理任何类型
2.以上分组都忽略null值
3.可以和distinct搭配实现去重的运算
4.count函数,一般使用count(*)用作统计行数
count(任意常量)都可以统计行数

SELECT COUNT(*) FROM employees; #统计employees中有多少条记录

SELECT SUM(salary)FROM employees;
SELECT SUM(DISTINCT salary)FROM employees;

SELECT AVG(salary)FROM employees;
SELECT MIN(salary)FROM employees;
SELECT MAX(salary)FROM employees;

你可能感兴趣的:(Mysql)