MySQL 查询在日期范围内返回错误的结果计数

标签 mysql date

我创建了一个返回日期范围内结果的查询,但是之前的开发人员通过将日期保存为 MySQL 中的 varchar(10) 以及两种格式来打击我(Y-m-dd-m-Y)。

我的问题是,当我选择从 01-June-201511-June-2015 的日期之间的结果时,它在 2015 年 6 月 给了我 18 个结果。

但是当我选择从 01-june-201411-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/

相关文章:

mysql - 如何在一个时间范围内只统计一次记录?

PHP - MySQL 准备语句插入一个数组

php - 检查没有前导零的日期表达式 ("d-m") 是否是今天

c# - 在 C# 中获取下一个光明节日期

在 R 中按组对数据表的日期范围滚动求和

Mysql 选择日期和可能的情况

mysql - SQL - 将 select 语句中具有不同列数的两个查询合并为一个

mysql - 如何在mysql中使用函数uuid()设置默认值?

c# - LINQ-to-Entities Include 的奇怪行为

java - Collections.sort(<StringDate>, new Comparator) 未正确比较日期