日期函数

now() 当前时间

  1. select now();

image.png

year() 年份

  1. 计算每个同学的年龄
    1. year(now()) 当前的年份
    2. year(birthdate) 出生的那年年份
    3. year(now()) - year(birthdate) 年龄
      1. SELECT id,username,birthdate, (YEAR(NOW()) - YEAR(birthdate)) as age from emps;

unix_timestamp() 时间戳

  1. SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(birthdate)) as "存活/秒" from emps;

image.png

date_format 日期格式化

符号 含义
%Y 4位数的年份
%m 月份
%d
%H 小时
%M 分钟
%S
  1. SELECT birthdate, DATE_FORMAT(birthdate,"%Y %m %d") from emps;
  1. 查询早上6:00-晚上6:00 之间出生的人;

    1. 使用 date_format格式化时间 date_format(birthdate,"%H")
      1. select * from emps
      2. where date_format(birthdate,"%H") between 6 and 18;
      image.png
  2. 按照出生进行降序排序;

    1. select * from emps
    2. order by birthdate desc;
  3. 计算最高薪水salary与最低薪水salary的差距;

    1. select max(salary),min(salary),max(salary)-min(salary) from emps;

    datediff() 计算时间差

    计算两个时间之间的条件

    1. SELECT DATEDIFF("2017-01-01", "2016-12-24");

    image.png

  1. select *,DATEDIFF(NOW(),birthdate) from emps;

image.png

date_add() 时间换算

  • MICROSECOND 微秒
  • SECOND 秒
  • MINUTE 分钟
  • HOUR 小时
  • DAY 天
  • WEEK 周
  • MONTH 月
  • QUARTER 季度
  • YEAR 年

  • -15 year : 15年前

    1. SELECT DATE_ADD(now(), INTERVAL -15 Year);
  • 20年后

    1. SELECT DATE_ADD(now(), INTERVAL 20 Year);

字符串相关

concat() 拼接

  1. SELECT CONCAT("xiaowang","-",20,"-",75)

image.png

  1. 查询student表,显示数据格式为 张三-男-20-75
    1. select concat(name,"-",sex,"-",age,"-",score) from student;
    image.png

IFNULL() 如果为空

  1. 查询学生信息,如果成绩score为null 显示缺考 ```sql select id,name,age,sex,ifnull(score,”缺考”) from student;

select id,name,age,IFNULL(sex,”不详”),IFNULL(score,”缺考”) from student;

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1631957472208-853c4d8b-4acd-4f2a-93d3-97d52b213316.png#clientId=u510e68b4-f5e9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=272&id=u707499da&margin=%5Bobject%20Object%5D&name=image.png&originHeight=544&originWidth=1000&originalType=binary&ratio=1&rotation=0&showTitle=false&size=169477&status=done&style=none&taskId=ua03210b0-f887-4a77-a03b-ceb8f6f53e8&title=&width=500)
  2. <a name="DQs4t"></a>
  3. # 总结
  4. ![Mysql 查询.svg](https://cdn.nlark.com/yuque/0/2021/svg/87080/1631959064246-5d81eb43-66ca-424b-b669-05fde90901cf.svg#clientId=uc217a8b5-cb74-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uc900e2e9&margin=%5Bobject%20Object%5D&name=Mysql%20%E6%9F%A5%E8%AF%A2.svg&originHeight=924&originWidth=1004&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1416777&status=done&style=none&taskId=ue6d6ef4c-2c4c-4a12-9908-ba8acfa07d9&title=)
  5. <a name="IKdhK"></a>
  6. # 作业
  7. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1631957888134-9197106b-fc65-4bf8-81d4-c9b2e80bb0fd.png#clientId=ufbfda8fc-23f3-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=274&id=u4ff4b345&margin=%5Bobject%20Object%5D&name=image.png&originHeight=548&originWidth=1002&originalType=binary&ratio=1&rotation=0&showTitle=false&size=191254&status=done&style=none&taskId=ufd2077f6-22a9-48ff-839a-12066176f94&title=&width=501)
  8. 1. 查询成绩大于60分的同学,并按照年龄升序排序;
  9. 1. 年龄最小的同学信息;
  10. 1. 年龄第二小的同学信息;
  11. ```sql
  12. -- 查询成绩大于60分的同学,并按照年龄升序排序;
  13. SELECT * FROM student
  14. WHERE score > 60 -- 先过滤成绩大于60
  15. ORDER BY age -- 按照年龄排序
  16. -- 年龄最小的同学信息;
  17. -- 1. 先找到最小的年龄
  18. SELECT min(age) FROM student;
  19. -- 2. 根据年龄找到对应的人
  20. SELECT * FROM student
  21. WHERE age=(SELECT min(age) FROM student);
  22. -- 年龄第二小的同学信息; 需要去重
  23. SELECT distinct(age) FROM student ORDER BY age LIMIT 1,1
  24. SELECT * FROM student
  25. WHERE age=(SELECT distinct(age) FROM student ORDER BY age LIMIT 1,1)
  1. 查询分数,并按照分数进行降序排序,分数一样,按照年龄升序排序;
  2. 统计sex为null的人员数量;
  3. 统计张姓人员的总数,总成绩,平均成绩; ```sql — 查询分数,并按照分数进行降序排序,分数一样,按照年龄升序排序; SELECT * FROM student ORDER BY score DESC , age;

— 统计sex为null的人员数量; SELECT COUNT(*) FROM student WHERE sex IS NULL;

— 统计张姓人员的总数,总成绩,平均成绩 SELECT COUNT()总数, SUM(score)总成绩, AVG(score)平均成绩 FROM student WHERE name LIKE “张%”; — 注意点: avg在计算的计算的时候会自动去掉Null值。 SELECT COUNT()总数, SUM(score)总成绩, SUM(score)/COUNT(*) 平均成绩 FROM student WHERE name LIKE “张%”;

  1. 7. 查询所有信息,成绩为空显示`缺勤`;
  2. 7. 统计男生的人数
  3. 7. 统计女生的人数
  4. 7. 一条sql语句分别统计男生,女生的人数;(**选做,需要后续知识**);
  5. ```sql
  6. -- 查询所有信息,成绩为空显示缺勤;
  7. select id,name,age,sex,ifnull(score,"缺勤") from student
  8. -- 统计男生的人数
  9. select count(*) from student
  10. where sex="男"
  11. -- 统计女生的人数
  12. select count(*) from student
  13. where sex="女"
  14. -- 一条sql语句分别统计男生,女生的人数
  15. select sex,count(*) from student
  16. where sex is not null
  17. group by sex

image.png

  1. 统计emps表中的人数;
  2. 统计月薪,并将月薪去重之后按照升序排序;
  3. 计算emps表中的每个人的月薪,年薪(默认12薪); ```sql — 统计emps表中的人数; select COUNT(*) from emps;

— 统计月薪,并将月薪去重之后按照升序排序; select DISTINCT salary from emps ORDER BY salary asc;

— 计算emps表中的每个人的月薪,年薪(默认12薪); select salary ,salary*12 from emps;

  1. 4. 计算每个人的年龄,输出姓名(username),年龄;
  2. 4. 计算`最大年龄的人``最小年龄的人`之间相差的天数;
  3. 4. 显示出 `姓名-年龄-月薪-年薪`
  4. ```sql
  5. -- 计算每个人的年龄,输出姓名(username),年龄;
  6. SELECT username,(year(now())-year(birthdate)) as 年龄 FROM emps;
  7. -- 计算最大年龄的人与最小年龄的人之间相差的天数;
  8. SELECT datediff(max(birthdate),min(birthdate)) as 相差天数 from emps;
  9. -- 显示出 姓名-年龄-月薪-年薪;
  10. select concat(username,"-",(year(now())-year(birthdate)),"-",salary,"-",salary*12) as "姓名-年龄-月薪-年薪" from emps;