mysql 笔记

一、随机从表中取一条数据   

三种方法:

   (1)ORDER BY RAND()

            写法:SELECT * FROM 表A ORDER BY RAND() LIMIT 1

            缺点:rand()放在ORDER BY 子句中会被执行多次,自然效率极低,mysql官方不提倡

   (2)max(id) * rand()   +   join

           写法:select id from 表A join (select round(rand()*(select max(id ) from table)) as idd) as 表B on 表A.id>表B.idd limit 1;

          大佬们都认为采用JOIN的语法是最优的

   (3)max(id) * rand()   

          写法:SELECT * FROM 表A  WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM 表A ) ORDER BY id LIMIT 1;

         此种写法的效率是介于前面两种之间

二、生成连续数字

-- 生成连续日期
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL xc MONTH), '%Y-%m') AS DATE
FROM ( 
	SELECT @xi:=@xi+1 AS xc FROM 
	(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1, 
	(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc2,  
	(SELECT @xi:=0) xc0 
) xcxc;

-- 生成连续数字
SELECT @xi:=@xi+1 AS xc FROM 
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1, 
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc2,  
(SELECT @xi:=0) xc0;

-- 生成当前周前7周数字
SELECT @xi:=@xi+1 AS xc FROM 
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7) xc1, 
(SELECT @xi:=WEEK(CURDATE()) - 7) xc0;

三、日历操作

-- 生成近10天日期
SELECT DATE_FORMAT(DATE_ADD('2019-08-20',INTERVAL -t.help_topic_id DAY),'%Y-%m-%d') AS 'curr_date'  
FROM mysql.help_topic t WHERE t.help_topic_id<=10;

-- 获取本周周一
SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-1);
-- 获取本周周末
SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-7);

SELECT SUBDATE('2020-08-20',DATE_FORMAT('2020-08-20','%w')-7);

SELECT DATE_FORMAT(DATE_ADD('2019-08-20',INTERVAL -t.help_topic_id DAY),'%Y-%m-%d') AS 'curr_date'  
FROM mysql.help_topic t WHERE t.help_topic_id<7;

-- 生成本周七天日期
SELECT DATE_FORMAT(DATE_ADD((SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-1)),INTERVAL +t.help_topic_id DAY),'%Y-%m-%d') AS 'curr_date'  
FROM mysql.help_topic t WHERE t.help_topic_id<7;

SELECT DATE_SUB(CURDATE(),INTERVAL 1 MONTH);
SELECT LAST_DAY(DATE_SUB(CURDATE(),INTERVAL 1 MONTH));
SELECT WEEKDAY(LAST_DAY(CURDATE()))
-- 查询本月最后一天
SELECT LAST_DAY(CURDATE());
-- 查询本月第一天
SELECT DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY)
SELECT DAY(CURDATE());

-- 查询最后一天属于第几周
SELECT WEEK(LAST_DAY(CURDATE()));
SELECT WEEK(DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY));
-- 查询今天属于第几周
SELECT WEEK(CURDATE());

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值