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)