Php 期间之间的查询日期

Php 期间之间的查询日期,php,mysql,sql,date,Php,Mysql,Sql,Date,所以,我试图查询两个日期之间的所有数据。my mysql表上的日期字段的格式如下:(dd-mm-yyy)。因此,我使用php来实现这一点 我做了这样的东西: SELECT * FROM `sells` WHERE date BETWEEN '01-01-2013' AND '04-02-2014' 当然,这个日期是可变的,但是对于phpmyadmin的测试,我并没有达到预期的结果。它给了我关于这个日期的所有数据,让我展示一下 03-01-2014 03-01-2014

所以,我试图查询两个日期之间的所有数据。my mysql表上的日期字段的格式如下:(dd-mm-yyy)。因此,我使用php来实现这一点

我做了这样的东西:

    SELECT *
FROM `sells`
WHERE date
BETWEEN '01-01-2013'
AND '04-02-2014'
当然,这个日期是可变的,但是对于phpmyadmin的测试,我并没有达到预期的结果。它给了我关于这个日期的所有数据,让我展示一下

03-01-2014      
03-01-2014  
03-01-2014      
01-02-2014      
01-02-2014          
03-02-2014      
03-02-2014      
03-02-2014 
03-02-2014 
当然,还有其他所有的数据,但都无关紧要

我想在一段时间内获取所有数据,如何修复此错误

谢谢

增加了显示表。 这是我的母语,所以。(这是一个国内系统,用于我的家庭业务

CREATE TABLE `vendas` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `id_cliente` int(11) NOT NULL,
 `cliente` varchar(255) CHARACTER SET latin1 NOT NULL,
 `produto` varchar(255) CHARACTER SET latin1 NOT NULL,
 `quantidade` int(255) NOT NULL,
 `valor` varchar(255) CHARACTER SET latin1 NOT NULL,
 `total` varchar(255) CHARACTER SET latin1 NOT NULL,
 `metodo` varchar(255) CHARACTER SET latin1 NOT NULL,
 `data` varchar(255) CHARACTER SET latin1 NOT NULL,
 `status` int(255) NOT NULL DEFAULT '1',
 `data_pagamento` varchar(255) CHARACTER SET latin1 NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

这就是当您将日期存储为字符串而不是日期时所发生的情况。您将得到查询地狱

您需要将字符串日期转换为正确的格式,然后将搜索条件更改为正确的日期格式(YYYY-MM-DD):

试试这个-

SELECT *
FROM `sells`
WHERE  DATE_FORMAT(<your column name>,'%m-%d-%Y') >= '01-01-2013'
and DATE_FORMAT(<your column name>,'%m-%d-%Y') <= '04-02-2014';
选择*
从`出售`
其中日期格式(,'%m-%d-%Y')>='01-01-2013'

和日期格式(,“%m-%d-%Y”)你有没有尝试过日期>和日期<?,这对他们没有帮助,因为他们的日期是以非标准格式存储的字符串,而不是日期。如果你将日期存储在YYYY-MM-DD中,即使是字符串,它仍然允许你使用中间值进行选择。但像这样永远不会起作用,只需将所有日期放在电子表格中的一列中,并对该列进行ASC排序。它将我将返回所有分组的结果,从所有01、02、03等开始,不考虑日期!@Matheus你能添加
SHOW CREATE TABLE sells;
output,所以我们确定列定义吗?他们在问题中说它们是dd-mm-yyyy格式在我的表上我有dd-mm-yyy格式的存储日期,这样行吗?我尝试过,但没有尝试过。我可以知道否决投票的原因吗。这是100%有效的代码,即使
date
具有
date
数据类型(并且不会像OP状态那样存储为字符串),此查询仍将返回超出范围的日期,如
'01-01-2068
。日期是其表的列名。如果更改列名,则此查询将正常工作
SELECT *
FROM `sells`
WHERE  DATE_FORMAT(<your column name>,'%m-%d-%Y') >= '01-01-2013'
and DATE_FORMAT(<your column name>,'%m-%d-%Y') <= '04-02-2014';
SELECT *
    FROM `sells`
    WHERE <your column name> between DATE_FORMAT('01-01-2013','%m-%d-%Y')  
    and DATE_FORMAT('04-02-2014','%m-%d-%Y');