当我从表格#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'
答案 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;
一步一步 -
然后您的查询就像
一样简单SELECT * FROM `tablename` where date between '2017-09-01' AND '2017-10-01'