我正在使用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天?
答案 0 :(得分:3)
假设您的日期列是正确的DATETIME
或DATE
字段,则不应使用DATE_FORMAT()
。使用DATE_SUB()
减去30天:
如果created_On
为DATETIME
,请使用DATE()
截断时间部分:
SELECT *
from Request
where
DATE(created_On) BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND CURDATE()
如果created_On
为DATE
,请使用:
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和字符串作为值会有不同的比使用日期