文章目录
- 一、模糊匹配【like】
- 二、CASE函数
- 1、简单case
- 2、搜索case
- 3、搜索case + 聚合函数
- 三、日期函数
- 四、字符串处理
一、模糊匹配【like】
一般形式为:列名 [NOT] LIKE ‘%关键字%’,示例如下:
- like '%北京%'列名包括北京的字样
- like ‘北京%’ 列名北京开头
- like ‘%北京’ 列名北京结尾
通配符:
- _:匹配任意一个字符;
- %:匹配0个或多个字符;
- [ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
- [^ ]:不匹配[ ]中的任意一个字符。
sql实例:
例1、查询学生表中姓‘张’的学生的详细信息。
SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%’例2、查询姓“张”且名字是3个字的学生姓名。
SELECT * FROM 学生表 WHERE 姓名 LIKE '张__’例3、查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。
SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%’例4、查询学生表表中名字的第2个字为“小”或“大”的学生的姓名。
SELECT 姓名,学号 FROM 学生表 WHERE 姓名 LIKE '_[小大]%'例5、查询学生表中所有不姓“刘”的学生。
SELECT 姓名 FROM 学生 WHERE 姓名 NOT LIKE '刘%’例6、从学生表表中查询学号的最后一位不是2、3、5的学生信息。
SELECT * FROM 学生表 WHERE 学号 LIKE '%[^235]'
二、CASE函数
1、简单case
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2 …
WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
SELECT 班号 ,班名,
CASE 系号
WHEN 1 THEN '软件工程系'
WHEN 2 THEN '计算机系'
WHEN 3 THEN '物联网系'
END AS 系号
FROM 班级表
2、搜索case
CASE
WHEN 布尔表达式1 THEN 结果表达式1
WHEN 布尔表达式2 THEN 结果表达式2 …
WHEN 布尔表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
SELECT 班号 ,班名,
CASE
WHEN 系号=1 THEN '软件工程系'
WHEN 系号=2 THEN '计算机系'
WHEN 系号=3 THEN '物联网系'
END AS 系号
FROM 班级表
ELECT 学号,课程号,
CASE
WHEN 成绩 >= 90 THEN '优'
WHEN 成绩 BETWEEN 80 AND 89 THEN '良'
WHEN 成绩 BETWEEN 70 AND 79 THEN '中'
WHEN 成绩 BETWEEN 60 AND 69 THEN '及格'
WHEN 成绩 <60 THEN '不及格'
END 成绩
FROM 成绩表
WHERE 课程号 = 'M01F011'
3、搜索case + 聚合函数
1、统计每个班男生和女生的数量各是多少,统计结果的表头为,班号,男生数量,女生数量。
SELECT 班号,
COUNT(CASE WHEN 性别=‘男’ THEN ‘男’ END) 男生数,
COUNT(CASE WHEN 性别=‘女’ THEN ‘女’ END) 女生数
FROM 学生表 GROUP BY 班号
2、25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量,表头为 age_cut ,number
SELECTCASEWHEN age < 25 OR age IS NULL THEN '25岁以下'WHEN age >= 25 THEN '25岁及以上'END age_cut,COUNT(*) number
FROMuser_profile
GROUP BYage_cut
参考文章:详细案例
三、日期函数
1、 2021-05-03
- year(date)=2021
- month(date)=8
- day(date)=3
- date_format(date,“%Y-%m”)=“202108”
2、
date_add (qpd.date, interval 1 day)
selectcount(date2) / count(date1) as avg_ret
from(select distinctqpd.device_id,qpd.date as date1,uniq_id_date.date as date2fromquestion_practice_detail as qpdleft join (select distinctdevice_id,datefromquestion_practice_detail) as uniq_id_date on qpd.device_id = uniq_id_date.device_idand date_add (qpd.date, interval 1 day) = uniq_id_date.date) as id_last_next_date
四、字符串处理
1、SUBSTRING_INDEX的写法