MySQL查询 – 今天和过去30天之间的logging

我想返回在过去30天内添加到数据库的所有logging。 由于显示目的,我需要将date转换为mm / dd / yy。

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y')) 

我的声明没有把logging限制在最近的30天 – 它select所有的logging。

任何人都可以指向正确的方向吗? 感觉就像我接近。

谢谢你,祝你有个美好的一周。

您需要在SELECT子句中应用DATE_FORMAT ,而不是WHERE子句:

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 

另请注意, CURDATE()仅返回DATE部分,所以如果将create_date作为DATETIME存储并填充了时间部分,则此查询将不会select今天的logging。

在这种情况下,您需要使用NOW来代替:

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
 SELECT * FROM < table_name > WHERE < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW(); 

DATE_FORMAT返回一个string,所以你在BETWEEN子句中使用了两个string,这不会像你期望的那样工作。

相反,在SELECT中将date转换为您的格式,然后在实际date间执行BETWEEN 。 例如,

 SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted FROM table WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE() 

你也可以在mysql中写这个 –

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date < DATE_ADD(NOW(), INTERVAL +1 MONTH); 

对于前30天的当前date活动和完成活动,使用这个,因为SYSDATE在一天中是可变的,前30天不会有当天的全部数据。

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE() 

我会做这样的事情:

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date >= (CURDATE() - INTERVAL 30 DAY)