我创建了一个返回日期范围内结果的查询,但是之前的开发人员通过将日期保存为 MySQL 中的 varchar(10)
以及两种格式来打击我(Y-m-d
和 d-m-Y
)。
我的问题是,当我选择从 01-June-2015
到 11-June-2015
的日期之间的结果时,它在 2015 年 6 月
给了我 18
个结果。
但是当我选择从 01-june-2014
到 11-June-2015
之间的结果时>,它给了我 13
June 2015
的结果,它必须是 18
结果,我想。
任务:获取某个日期范围内的新访客总数,但访客表中没有日期,所以我从访客表中获取他的首次访客日期这就是我使用 MIN()
的原因功能
MySQL 查询是:
SELECT min(visits.id), t.id, t.first_name,
visits.date_check_in
FROM `visitor` `t`
JOIN `visit` `visits` ON visits.visitor = t.id
WHERE
((STR_TO_DATE(visits.date_check_in, '%d-%m-%Y') BETWEEN
STR_TO_DATE('11-06-2014', '%d-%m-%Y') AND STR_TO_DATE('11-06-2015',
'%d-%m-%Y'))
OR (STR_TO_DATE(visits.date_check_in, '%Y-%m-%d') BETWEEN
STR_TO_DATE('2014-06-11', '%Y-%m-%d') AND STR_TO_DATE('2015-06-11',
'%Y-%m-%d')) )
AND (t.is_deleted = 0)
AND (visits.is_deleted = 0)
AND (visits.visit_status != 2)
GROUP BY `t`.`id`
请帮助我我做错了什么。我花了大约 4 天的时间思考和做不同的事情,但卡住了。 我希望能尽快收到您的来信,谢谢。
最佳答案
如果日期格式不是 Y-m-d
,您需要做的就是找出日期格式。如果格式为d-m-Y
,将其更改为Y-m-d
,然后进行比较,如:
WHERE
IF(SUBSTRING(visits.date_check_in, 5, 1) = '-',
visits.date_check_in,
STR_TO_DATE(visits.date_check_in, '%d-%m-%Y')
) BETWEEN '2014-06-11' AND '2015-06-11'
关于MySQL 查询在日期范围内返回错误的结果计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771780/