数据库中运算

  1. select 1+1;
  2. SELECT (1+1)*3;

时间函数

now() 当前时间

  1. select now();

image.png

year() 年

使用year()函数的时候,需要传入日期

  1. select YEAR("2020-10-10");

image.png

返回当前的时间

  1. select YEAR(NOW());

image.png

查询学生表中1995出生的学生信息;

  1. SELECT * from students where year(birthday) = 1995;

image.png

year(birthday) 会把具体的日期换成年份显示;

查询1995,1997,2011 年出生的学生;

  1. select * from students where year(birthday) in (1995,1997,2011);

month() 月份

传入一个日期,返回这个日期对应的月份

  1. SELECT MONTH(NOW());

image.png
查询1月份出生的学生信息;

  1. select * from students where month(birthday) = 1;

查询1月份-6月份之间出生的同学

  1. select * from students where month(birthday) between 1 and 6;
  2. select * from students where month(birthday) <= 6;

day() 月份中天

  1. select DAY(now())

Hour() 小时

  1. SELECT HOUR(NOW());

Minute() 分钟

  1. select MINUTE(now());

Second() 秒

  1. SELECT SECOND(NOW());

查询出生日期中为 月份为1-6月 并且在 12:00-18:00 之间出生的同学;

  1. select * from students
  2. where month(birthday) between 1 and 6
  3. and
  4. hour(birthday) between 12 and 18;

Date_Format() 格式转换

格式 描述
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位
  1. select date_format(now(),"%H-%i-%s");
  1. select * from students
  2. where date_format(birthday,"%m") between 1 and 6
  3. and
  4. DATE_FORMAT(birthday,'%H') between 12 and 18;

datediff() 计算日期差值

传入两个值,计算两个时间之间相差的天数

  1. SELECT DATEDIFF(NOW(),"1991-10-01");

image.png
1991-10-01 到今天总过了 多少天;
image.png
查询最近10天出生的学生信息;

  1. select * from students where datediff(now(),birthday) <=10;
  • now() 当前时间
  • birthday 数据库中表里面的具体的时间
  • datediff() 计算两个时间之间

date_add() 更加灵活的时间操作

Type 值 说明
MICROSECOND 毫秒
SECOND
MINUTE 分钟
HOUR 小时
DAY
WEEK
MONTH
QUARTER 季度
YEAR
  1. 15个月前的那天

    1. select date_add(now(),INTERVAL -15 month );

    image.png

  2. 2天后

    1. select date_add(now(),interval 2 day);

    image.png

  3. 查询最近15个月出生的学生信息;

    1. select * from students where birthday >= date_add(now(), interval -15 month);

    思维导图

    数据库查询.svg

    作业

    查询heros 表

  4. 按照hp_max 从大到小排序,查询 上架时间(birthdate)不为null 的英雄信息 ```sql select from (select from heros order by hp_max desc) as tmp where not birthdate is null;

SELECT * FROM heros where not birthdate is null order by hp_max desc;

  1. 2. 查询20152016年度上架的所有英雄
  2. ```sql
  3. select * from heros where birthdate like "2015%" or birthdate like "2016%";
  4. select * from heros where YEAR(birthdate) in (2015,2016);
  1. 查询 上架时间(birthdate)为null的影响,按照hp_max进行从大到小的排序;

    1. SELECT * FROM heros WHERE birthdate IS NULL ORDER BY hp_max DESC ;
  2. 查询 姓名为三个字,按照 hp_5s_max 从大到小,hp_max从小到大进行排序;

    1. SELECT * FROM heros WHERE NAME LIKE "___" ORDER BY hp_5s_max DESC,hp_max ASC;
  3. 查询hp_max最高的英雄信息;

    1. select hp_max from heros order by hp_max desc limit 1;
    2. select * from heros where hp_max = (select hp_max from heros order by hp_max desc limit 1);
  4. 查询hp_max最低的英雄信息;

    1. select * from heros where hp_max = (select hp_max from heros order by hp_max limit 1);
  5. 查询hp_max第二高的英雄信息; ```sql — 1. 找到第二高的值 select hp_max from heros where hp_max < (select hp_max from heros order by hp_max desc limit 1) order by hp_max desc limit 1;

— 2. 根据值找人 select * from heros where hp_max = ( select hp_max from heros where hp_max < (select hp_max from heros order by hp_max desc limit 1) order by hp_max desc limit 1 );

  1. 8. 查询hp_max第二低的英雄信息;
  2. ---
  3. 查询students
  4. 1. 查询 2020年以后出生的学生
  5. ```sql
  6. select * from students where year(birthday) > 2020;
  1. 查询成绩最高的学生,并按id进行降序排序; ```sql — 1. 找到最高分 select score from students order by score desc limit 1;

— 2. 根据最高分找人 select * from students where score = (select score from students order by score desc limit 1) order by id desc;

  1. 3. 查询语文分数最高的学生;
  2. ```sql
  3. -- 1. 先找语文最高分
  4. select score from students where course = "语文" order by score desc limit 1;
  5. -- 2. 根据分数找对应的人
  6. select * from students where course = "语文" and
  7. score = (select score from students where course = "语文" order by score desc limit 1);
  1. 查询数学成绩最低的学生;