MySQL查询select上周的数据?
嗨,我有一个date字段和其他一些信息表。 我想select过去一周的所有参赛作品,(从周日开始的一周)。
表值:
id date 2 2011-05-14 09:17:25 5 2011-05-16 09:17:25 6 2011-05-17 09:17:25 8 2011-05-20 09:17:25 15 2011-05-22 09:17:25
我想从上周select所有的ID,预期的输出是5,6,8。 (ID 2不在上周,ID 15在本周。)
如何编写和SQL查询相同。
SELECT id FROM tbl WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
select id from tbname where date between date_sub(now(),INTERVAL 1 WEEK) and now();
简化forms:
上周数据:
SELECT id FROM tbl WHERE WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );
2周前数据:
SELECT id FROM tbl WHERE WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date );
SQL小提琴
您可以在php中进行计算,然后将其添加到您的查询中:
$date = date('Ymd H:i:s',time()-(7*86400)); // 7 days ago $sql = "SELECT * FROM table WHERE date <='$date' ";
现在这会给一个星期前的date
SELECT id FROM table1 WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)
我特别使用YEARWEEKfunction回到之前的整个日历周(而不是今天的前7天)。 YEARWEEK还允许第二个参数设置一周的开始,或者确定如何处理年度的第一个/最后一个星期。 YEARWEEK可以让您在单个variables中保留周/周的数量,并且不会包含与过去/未来年份相同的周数,而且比这里的其他大部分答案要短得多。
你需要计算哪一天相对于今天是星期天在你的中间件(php,python等)*
然后,
select id from table where date >= "$sunday-date" + interval 7 DAY
- 可能是一种在MySQL中获取相对于今天的星期日的方法; 如果不是太昂贵的话,这可以说是更清洁的解决scheme
可能最简单的方法是:
SELECT id FROM table WHERE date >= current_date - 7
8天(即星期一至星期一)
它可以在一行中:
SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()
上面的查询将不起作用。 在where
子句之后,如果我们不能CAST
列值,那么它将不起作用。 您应该cast
列值。
例如:
SELECT..... WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE )
SELECT id FROM tb1 WHERE YEARWEEK (date) = YEARWEEK( current_date -interval 1 week )
我经常做一个快速的“上周”检查,以下往往适合我,包括今天。
DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME SET @StartDate = Getdate() - 7 /* Seven Days Earlier */ SET @EndDate = Getdate() /* Now */ SELECT id FROM mytable WHERE date BETWEEN @StartDate AND @Enddate
如果你想这不包括今天只是从@EndDate减去额外的一天。 如果我今天select这两个variables得到
@StartDate 2015-11-16 16:34:05.347 / *上周一* /
@EndDate 2015-11-23 16:34:05.347 / *本周一* /
如果我想星期天到星期天,我会有以下几点。
SET @StartDate = Getdate() - 8 /* Eight Days Earlier */ SET @EndDate = Getdate() - 1 /* Yesterday */
@StartDate 2015-11-15 16:34:05.347 / *上周日* /
@EndDate 2015-11-22 16:34:05.347 / *上个星期天* /
尝试这个:
Declare @Daytype varchar(15), @StartDate datetime, @EndDate datetime set @Daytype = datename(dw, getdate()) if @Daytype= 'Monday' begin set @StartDate = getdate()-7 set @EndDate = getdate()-1 end else if @Daytype = 'Tuesday' begin set @StartDate = getdate()-8 set @EndDate = getdate()-2 end Else if @Daytype = 'Wednesday' begin set @StartDate = getdate()-9 set @EndDate = getdate()-3 end Else if @Daytype = 'Thursday' begin set @StartDate = getdate()-10 set @EndDate = getdate()-4 end Else if @Daytype = 'Friday' begin set @StartDate = getdate()-11 set @EndDate = getdate()-5 end Else if @Daytype = 'Saturday' begin set @StartDate = getdate()-12 set @EndDate = getdate()-6 end Else if @Daytype = 'Sunday' begin set @StartDate = getdate()-13 set @EndDate = getdate()-7 end select @StartDate,@EndDate
WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;
你也可以用它的方式
SELECT * FROM inventory WHERE YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)
我从星期一开始使用这个星期:
SELECT id FROM tbl WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY
一个简单的方法可以是这个,这是我的代码的一个真实的例子,完美的作品:
where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")
请人们……“上个星期”就像OP询问的,我在哪里寻找的(但没有发现满意的答案)是最后一周。
如果今天是星期二,那么上周是星期一星期一到星期天星期天。
所以:
WHERE WEEK(yourdate) = WEEK(NOW()) - 1
或ISO周:
WHERE WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1
如果你已经知道date,那么你可以简单地使用,如下所示:
SELECT id FROM `Mytable` where MyDate BETWEEN "2011-05-15" AND "2011-05-21"