查询显示日期范围内的行,包括日,月和年

时间:2014-07-21 14:46:52

标签: mysql

我的表格中有以下列:

年,月,日,信息

我需要一个查询来选择用户确定的日期范围内的行。用户将选择初始日期,月份和年份以及最后的日期,月份和年份。目前,我的查询是:

SELECT
    CONCAT(LPAD(`day`,2, 0),'/',LPAD(`month`,2, 0),'/',`year`) AS data,
    info
FROM
    Log
WHERE
    (year > :initial_year OR (year = :initial_year AND month >= :initial_moth AND day >= :initial_day))
    AND (year < :final_year OR (year = :final_year AND month <= :final_month AND day <= :final_day))
GROUP BY
    year, month, day
ORDER BY
    year DESC, month DESC, day DESC

但是这个查询并没有显示任何结果,即使它们在数据库中也是如此!有什么问题,我该如何解决?

2 个答案:

答案 0 :(得分:1)

你的逻辑错了:

WHERE (
        year > :initial_year OR (
          year = :initial_year AND month >= :initial_moth AND day >= :initial_day
        )
      )

将排除您的初始年份中日期部分大于初始日期部分的任何日期。例如yyyy-01-31作为第一天将排除日期部分不是31的yyyy的所有结果。

最终日期存在类似问题。

根据评论中的建议,在数据库中使用一个DATE字段,然后在应用程序代码中进行其他操作;它会节省很多戏剧性。

如果您无法更改数据库,请查找并指责设计该数据库的人员,直到他们更改为止。如果你不能这样做那么:

WHERE (year>:initial_year OR (year=:initial_year AND (month>:initial_month OR (month=:initial_month AND day>=:initial_day))))

和最终日期类似

答案 1 :(得分:0)

怎么样:

选择 concat(年,月,日)作为日期,信息 从 日志 哪里 thedate&gt; =:startdate和thedate&lt; =:enddate 订购 thedate desc;