我的表格中有以下列:
年,月,日,信息
我需要一个查询来选择用户确定的日期范围内的行。用户将选择初始日期,月份和年份以及最后的日期,月份和年份。目前,我的查询是:
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
但是这个查询并没有显示任何结果,即使它们在数据库中也是如此!有什么问题,我该如何解决?
答案 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;