Mysql 显示日期范围内的行(包括日、月和年)的查询
我的表日志中有以下列: 年、月、日、信息 我需要一个查询来选择用户确定的日期范围内的行。用户将选择初始日期、月份和年份,以及最终日期、月份和年份。目前,我的问题是:Mysql 显示日期范围内的行(包括日、月和年)的查询,mysql,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 mo
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
选择
CONCAT(LPAD(`day`,2,0),'/',LPAD(`month`,2,0),'/',`year`)作为数据,
信息
从…起
日志
哪里
(年>:起始年或(年=:起始年和月>=:起始月和日>=:起始日))
和(年)<:最后一年或(年=:最后一年和月)
挑选
concat(年、月、日)作为日期,信息
从…起
日志
哪里
日期>=:开始日期和日期您的逻辑错误:
WHERE (
year > :initial_year OR (
year = :initial_year AND month >= :initial_moth AND day >= :initial_day
)
)
将排除初始年份中日期部分大于初始日期部分的任何日期。例如,yyyy-01-31
,因为初始日期将排除日期部分不为31的yyy
的所有结果
最终日期也存在类似的问题
正如评论中所建议的,在数据库中使用一个日期
字段,在应用程序代码中使用另一个字段;这将节省大量的时间
如果您无法更改数据库,请查找并斥责设计该数据库的人员,直到他们更改该数据库。如果您无法更改,则:
WHERE (year>:initial_year OR (year=:initial_year AND (month>:initial_month OR (month=:initial_month AND day>=:initial_day))))
与最终日期类似,如果您使用了一个date
字段,而不是将其拆分为三个单独的字段,那么这将容易得多……您是对的,但我不能修改数据库。除了可怕的格式之外,您不能在WHERE
子句中使用列别名。