内容一: 时间函数(数据分析也是时间)
概念:日期(date类型 ----年月日 ) 时间(time---时分秒)
日期时间类型(datetime 年月日 时分秒)
注意日期时间格式 %Y 年 %m月 %d 日 %H 小时 %i 分钟 %s 秒
分类:
- 日期时间获取函数
- 日期时间格式转换函数
- 日期时间计算函数
-- 1.日期时间获取函数
select now(),curdate();获取当前时间 +当前日期
select date(now()); 获取当前的日期
select time(now()); 获取当前的时间
单个获取年月日 时分秒
select year(now()),month(now()),day(now()),
hour(now()),minute(now()),second(now());
获取当前时刻所属的周数
select WEEKOFYEAR(now());
获取 当前的天数 0~ 2020-9-29 天
select TO_DAYS('2020-9-29');
获取今天是星期几==》注意 老外 星期天 1 星期一2
select DAYOFWEEK(now());
计算日子所属的季度
select quarter("2019-09-01") ;
2.日期时间格式转换函数
注意日期时间格式 %Y 年 %m月 %d 日 %H 小时 %i 分钟 %s 秒
日期转换函数 DATE_FORMAT(日期时间,格式)
select DATE_FORMAT("2019-1-31 22:37:22","%Y-%m-%d %H-%i-%s") ;
3日期时间计算函数
时间可以 向后偏移 date_add +向前 date_sub
select "2019-01-01 10:06:32",
date_add("2019-01-01 10:06:32",INTERVAL 7 year) as "往后推年份",
date_add("2019-01-01 10:06:32",INTERVAL 7 month) as "往后推月份",
date_add("2019-01-01 10:06:32",INTERVAL 7 day) as "往后推日子",
date_add("2019-01-01 10:06:32",INTERVAL -7 year) as "往前推年份",
date_add("2019-01-01 10:06:32",INTERVAL -7 month) as "往前推月份",
date_add("2019-01-01 10:06:32",INTERVAL -7 day) as "往前推日子",
date_add("2019-01-01 10:06:32",INTERVAL 7 hour) as "往后推小时",
date_add("2019-01-01 10:06:32",INTERVAL 7 minute) as "往后推分钟",
date_add("2019-01-01 10:06:32",INTERVAL 7 SECOND) as "往后推秒数"
date_add 和date_sub 效果相反
select "2019-01-01 10:06:32",
date_sub("2019-01-01 10:06:32",INTERVAL 7 year) as "往前推年份",
date_sub("2019-01-01 10:06:32",INTERVAL 7 month) as "往前推月份",
date_sub("2019-01-01 10:06:32",INTERVAL 7 day) as "往前推日子",
date_sub("2019-01-01 10:06:32",INTERVAL -7 year) as "往后推年份",
date_sub("2019-01-01 10:06:32",INTERVAL -7 month) as "往后推月份",
date_sub("2019-01-01 10:06:32",INTERVAL -7 day) as "往后推日子",
date_sub("2019-01-01 10:06:32",INTERVAL 7 hour) as "往前推小时",
date_sub("2019-01-01 10:06:32",INTERVAL 7 minute) as "往前推分钟",
date_sub("2019-01-01 10:06:32",INTERVAL 7 SECOND) as "往前推秒数"
这些函数不要求记住这些函数,但是会查询 函数大全
接下来我们创建一个业务表
CREATE table jwhuaweitest
(
id int(11) PRIMARY KEY AUTO_INCREMENT,
brand_name varchar(100) DEFAULT NULL COMMENT '品牌名称',
model_name varchar(100) DEFAULT NULL COMMENT '机型名称',
jwdate date DEFAULT NULL COMMENT '日期',
sale_num int(11) DEFAULT 0 COMMENT '销量',
insert_time datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '插入时间'
)
ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='TOP机型,品牌表';
然后我们插入数据
insert into jwhuaweitest(brand_name,model_name,jwdate,sale_num,insert_time)
VALUES
('华为','荣耀','2020-1-30',30,'2020-2-11 10:02:11'),
('华为','Nova','2019-12-19',30,'2020-2-12 10:02:11'),
('华为','mate30 pro','2020-3-30',30,'2020-2-11 10:03:11'),
('小米','mix','2017-1-30',30,'2020-2-11 10:02:11'),
('苹果','iPhone 11 pro max','2020-1-30',30,'2020-2-11 14:02:11'),
('小米','9','2020-01-18',30,'2020-03-11 22:02:11'),
('华为','matpad pro','2020-01-30',30,'2020-03-11 10:02:11'),
('华为','matpad pro','2020-9-26',30,'2020-03-11 10:02:11'),
('华为','matpad pro','2020-9-25',30,'2020-03-11 10:02:11'),
('华为','matpad pro','2020-9-20',30,'2020-03-11 10:02:11'),
('华为','matpad pro','2020-8-30',30,'2020-03-11 10:02:11'),
('华为','matpad pro',now(),30,'2020-03-11 10:02:11'),
('华为','matpad pro','2020-3-30',30,'2020-03-11 10:02:11')
;
如图所示
(学什么?时间写法(面试重点):比如: 本周 上一周 本月 上月 )
计算 两个日期内容 天数
select DATEDIFF("2019-01-07","2020-01-07")
获取指定日期数据
例子1: 查询 日期 是 20200919的数据
select * from jwhuaweitest where
date_format(jwdate,"%Y%m%d")='20200919';
例子2: 查询 日期 是 2019的数据
select * from jwhuaweitest where
date_format(jwdate,"%Y")='2019';
获取一段时间内(一段日子 一段月份 一段年 一段小时 一段分钟 一段秒)的数据
例子3 获取2020年 1月份 到 3月份数据
select * from jwhuaweitest where
date_format(jwdate,"%Y%m")
between
'202001'
AND
'202003';
最后大家按照我建的表多试试,多练练。不需要全部记住,但是基本的还是要记住的哈!!