Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 显示日期范围内的行(包括日、月和年)的查询_Mysql - Fatal编程技术网

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
子句中使用列别名。