获取两个日期之间的数据

时间:2012-02-27 13:38:49

标签: mysql sql

我正在使用MySql数据库。我正在执行这样的查询:

select * 
from Request
where 
DATE_FORMAT(created_On,'%e/%m/%Y') between DATE_FORMAT(CURDATE() - 30, '%e/%m/%Y') and DATE_FORMAT(CURDATE(),'%e/%m/%Y')

它将返回空白,表示结果中没有记录。

但如果我这样写

select * 
from Request
where 
DATE_FORMAT(created_On,'%e/%m/%Y') between DATE_FORMAT(CURDATE() - 27, '%e/%m/%Y') and DATE_FORMAT(CURDATE(),'%e/%m/%Y')

它将获取100行。

我想问一下,为什么我从当前日期减去30天?

3 个答案:

答案 0 :(得分:3)

假设您的日期列是正确的DATETIMEDATE字段,则不应使用DATE_FORMAT()。使用DATE_SUB()减去30天:

如果created_OnDATETIME,请使用DATE()截断时间部分:

SELECT * 
from Request
where 
  DATE(created_On) BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND CURDATE()

如果created_OnDATE,请使用:

SELECT * 
from Request
where 
  created_On BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND CURDATE()

答案 1 :(得分:1)

您还可以在日期上使用TO_DAYS功能,以便比较日期和日期时间字段:

SELECT * from Request
where TO_DAYS(created_On) BETWEEN TO_DAYS(DATE_SUB(CURDATE(), INTERVAL 30 DAY)) AND TO_DAYS(CURDATE()) 

答案 2 :(得分:0)

您是否至少可以先发布数据样本并首先识别created_on,以便我们能够对您的问题进行正确的分析?因为老实说,当你在第一个假设之间使用时,created_on将是类型日期,但是然后date_format函数再次将你的日期转换为字符串,所以使用between和字符串作为值会有不同的比使用日期

之间的结果