常用函数
字符函数:
-
concat()拼接字符
SELECT CONCAT('hello',last_name,first_name) FROM employees;
-
length()获取字节长度
SELECT LENGTH('hello,郭襄') //12
-
char_length()获取字符长度
SELECT CHAR_LENGTH('hello,郭襄') //8
-
substr(str,起始索引,截取的个数) 截取子串
substr(str,起始索引) //从起始索引到最后
mysql起始索引为1,第二个参数为截取字符串的个数
SELECT SUBSTR('张三丰爱上了郭襄',1,3) //张三丰 SELECT SUBSTR('张三丰爱上了郭襄',7) //郭襄
-
instr() 获取字符第一次出现的索引
SELECT INSTR('三打白骨精','白骨精') //3
-
trim()去除前后指定字符,默认去空格
-
LPAD/RPAD 左填充、右填充
LPAD、RPAD (str,len,padstr)
str:目标字符串
len:结果字符串的长度
padstr:填充字符串
如果str的长度没有length那么长,则使用padstr填充;如果str的长度大于length,则截断。
-
UPPER/LOWER 转大写、转小写
-
strcmp 比较两个字符大小
STRCMP(expr1,expr2)
如果字符串相同,则STRCMP()返回0;如果第一个参数根据当前排序顺序小于 第二个参数,则返回-1,否则返回1。
-
left/right 截取字串
LEFT、RIGHT(Str,length);
接收两个参数:
str:一个字符串;
length:想要截取的长度,是一个正整数;
数学函数:
-
ABS 绝对值
-
cell 向上取整
-
foolr 向下取整
-
round 四舍五入,小数点后一位四舍五入
-
truncate 截断
-
mod 取模
日期函数:
-
now() 获取当前日期包含时间
-
curdate() 获取当前日期
-
curtime() 获取当前时间
-
DATEDIFF(date1,date2) 获取两个日期差
-
DATE_FORMAT(date,format) 获取指定格式的日期时间
-
str_to_date(str,format) 按指定的格式解析字符串为日期类型
-
在日期中提取年、月、日、时、分、秒
-
year(date);
-
month(date);
-
day(date);
-
hour(date);
-
minute(date);
-
second(date);
-
流程控制函数:
-
if函数
-
IF(expr1,expr2,expr3)
如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
SELECT IF(TRUE,'A','B'); -- 输出结果:A SELECT IF(FALSE,'A','B'); -- 输出结果:B
-
IFNULL(expr1,expr2)
IFNULL(expr1,expr2),如果expr1的值为null,则返回expr2的值,如果expr1的值不为null,则返回expr1的值。
SELECT IFNULL(NULL,'B'); -- 输出结果:B SELECT IFNULL('HELLO','B'); -- 输出结果:HELLO
-
NULLIF(expr1,expr2)
NULLIF(expr1,expr2),如果expr1=expr2成立,那么返回值为null,否则返回值为expr1的值。
SELECT NULLIF('A','A'); -- 输出结果:null SELECT NULLIF('A','B'); -- 输出结果:A
-
ISNULL(expr)
ISNULL(expr),如果expr的值为null,则返回1,如果expr1的值不为null,则返回0。
SELECT ISNULL(NULL); -- 输出结果:1 SELECT ISNULL('HELLO'); -- 输出结果:0
-
-
case函数
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;
分组函数
说明:分组函数往往用于实现将一组数据经行统计计算,最终得到一个值, 又称为聚合函数或统计函数
-
sum()/求和
-
avg()/求平均数
-
max()/求最大值
-
min()/求最小值
-
count()/计算非空字段的个数
补充:
- 统计结果集的行数 :count(*) count(1) count(字段名)
②搭配distinct实现去重:count(distinct 字段名)
分组查询语法
语法: 执行顺序
select 查询列表 ⑤
from 表名 ①
where 筛选条件 ②
group by 分组列表 ③
having 分组后筛选 ④
order by 排序 ⑥
特点:
-
查询列表为分组函数和被分组的字段
-
分组查询中的筛选分为两类:
位置 筛选的基表 使用的关键词 原始表 where group by 前 临时表 having group by 后