0
点赞
收藏
分享

微信扫一扫

Linux(八)MySQL时间函数,逻辑判断,排序,分页,三大范式

爱读书的歌者 2022-03-12 阅读 56

时间函数

-- 获取所有
select CURRENT_TIMESTAMP();
select CURRENT_TIMESTAMP;
--  获取年月日
select CURRENT_DATE();
select CURRENT_DATE;
-- 获取时分秒
SELECT CURRENT_TIME();
SELECT CURRENT_TIME;
 时间转str
-- SELECT CURRENT_Date;

-- SELECT DATE_FORMAT(CURRENT_Date(),'%Y-%m-%d');

-- str转时间
-- select STR_TO_DATE('2022-03-10','%Y-%m-%d');

select datediff('2022-03-14','2022-03-01'); # 13
DATE_ADD(date,INTERVAL expr unit)
## INTERVAL:关键字
## expr:加减的值
## unit:单位(year 月 day)

select DATE_ADD('2022-03-03',INTERVAL -3 day)

练习:求时间的分类

-- 第一步 时间相减 0 1 2 3 4 5 6---13
select *,datediff(datetime,'2022-03-01') from test;
-- 第二部 除以7    0.0 0.0002 0.0003..1.1
select *,datediff(datetime,'2022-03-01')/7 from test;
-- 第三步 向下取整
select *,FLOOR(datediff(datetime,'2022-03-01')/7) as g from test;
-- 第四步:确定开头和结尾
select *,FLOOR(datediff(datetime,'2022-03-01')/7)*7  from test;
select *,DATE_ADD('2022-03-01',INTERVAL FLOOR(datediff(datetime,'2022-03-01')/7)*7 day) from test;
select *,DATE_ADD('2022-03-01',INTERVAL FLOOR(datediff(datetime,'2022-03-01')/7)*7+6 day) from test;
-- 第五步concat()
select *,CONCAT(
	DATE_ADD('2022-03-01',INTERVAL FLOOR(datediff(datetime,'2022-03-01')/7)*7 day),
	'~',
	DATE_ADD('2022-03-01',INTERVAL FLOOR(datediff(datetime,'2022-03-01')/7)*7+6 day)) from test;

逻辑判断

select *,if(sex='1','男','女') from student;
select *,if(age>=18,'成年','未成年') from student;
select *,case when sex='1' then '男' else '女' end as gender from student;
select *,case when age>=18 then '成年' else '未成年' end as gender from student;


select *,case when age=18 then '刚成年' when age<18 then '未成年' else '以成年' end from student;

排序

#  默认不给排序规则 就是升序
select * from student order by age;		# age 从小到大 升序
select * from student order by age asc;#   age从小到大 升序
select * from student order by age desc;#  从大到小 降序

# age 从小到大 如果有相同的age按sex从小到大
select * from student order by age ,sex;

# age 从小到大 如果有相同的age按sex从大到小
select * from student order by age ,sex desc;


# age 从大到小 如果有相同的age按sex从大到小
select * from student order by age desc ,sex desc;

分页

select * from student limit 2; # 从0开始取两个
select * from student limit 2,5; # 从2开始取5个

MSQL三大范式

group分组

select * from student group by sex; # 所获取的id name age 没有任何作用
select sex,聚合函数 from student group by sex;  # 通常使用获取分组字段 和聚合函数

TopN

-- TopN 
-- Top1
select * from student  s1 where 0=(select count(*) from student as s2  where s1.sex=s2.sex and s1.age<s2.age)
-- -- Top3
select * from student  s1 where 3>(select count(*) from student as s2  where s1.sex=s2.sex and s1.age<s2.age)


举报

相关推荐

0 条评论