在mysql之间的日期没有正确工作

时间:2017-10-01 11:50:57

标签: php mysql

当我从表格#34获取数据时;例如日期为2017年9月1日至2017年3月30日"那就好了..

但是当我尝试从2017年9月1日到2017年10月1日期间获取数据时,它仅显示DATE 01/10/2017的数据(不是上个月的数据,即01/09/2017)< / p>

我正在使用MySQL数据库。

SELECT * FROM `tablename` where date between '01/09/2017' AND '01/10/2017'

3 个答案:

答案 0 :(得分:1)

如果您将值保存为DATE格式,则应该有效。如果不是(您将数据保存为VARCHAR,则可以将其转换为日期并获得正确的结果。

STR_TO_DATE('01/09/2017', '%m/%d/%Y')

答案 1 :(得分:0)

根据您的示例,您将日期存储为text,因此您需要应用STR_TO_DATE()来执行日期操作

尝试以下查询:

SELECT * FROM `tablename` where STR_TO_DATE(date,'%d/%m/%Y')between 
STR_TO_DATE('01/09/2017','%d/%m/%Y') AND STR_TO_DATE('01/10/2017','%d/%m/%Y');

答案 2 :(得分:0)

您需要将日期存储为DATE类型而不是VARCHAR或TEXT。

此外,数据库日期的格式通常为YYYY-MM-DD,因此您需要相应地调整查询。

由于尝试使用STR_TO_DATE的速度是一个糟糕的想法,最好转换一次,然后按预期使用MySQL。

先备份您的数据,然后我(想)以下内容将会有效

BEGIN;
ALTER TABLE `tablename` 
ADD COLUMN `new_date` DATE;

UPDATE `tablename` 
SET `new_date` = STR_TO_DATE(`date`, '%d/%m/%Y');

ALTER TABLE `tablename` 
DROP COLUMN `date`;

ALTER TABLE `tablename` 
CHANGE COLUMN `new_date` `date` DATE;
COMMIT;

一步一步 -

  1. 添加额外的列以暂时存储数据
  2. 更新表并复制当前日期列值(格式化 数据库友好日期)进入新临时列。
  3. 删除旧列
  4. 将列名更改为以前的名称,以便所有现有查询都有效。
  5. 然后您的查询就像

    一样简单
    SELECT * FROM `tablename` where date between '2017-09-01' AND '2017-10-01'