Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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_Sql_Select - Fatal编程技术网

选择年份不工作的日期-MySQL

选择年份不工作的日期-MySQL,mysql,sql,select,Mysql,Sql,Select,我使用此查询选择日期之间的数据: SELECT id, date FROM table WHERE date BETWEEN '09/10/2015' and '09/23/2015'; 我得到了这些结果: 1 09/11/2015 2 09/13/2015 3 09/16/2015 4 09/21/2015 5 09/21/2015 6 09/21/2015 7 09/22/2015 8 09/23/2015 但是,当我将日期更改为一年前,它不会再次显示所有

我使用此查询选择日期之间的数据:

SELECT id, date FROM table WHERE date BETWEEN '09/10/2015' and '09/23/2015';
我得到了这些结果:

1   09/11/2015
2   09/13/2015
3   09/16/2015
4   09/21/2015
5   09/21/2015
6   09/21/2015
7   09/22/2015
8   09/23/2015
但是,当我将日期更改为一年前,它不会再次显示所有这些数据,而是返回一个忽略年份的结果:

SELECT id, date FROM table WHERE date BETWEEN '09/15/2014' and '09/23/2015';
结果:

3   09/16/2015
4   09/21/2015
5   09/21/2015
6   09/21/2015
7   09/22/2015
8   09/23/2015
我错过了什么

编辑:


日期列数据类型:varchar。

看起来您正在提交sin。将日期值存储为字符串。这很糟糕。SQL具有内置的日期数据类型和丰富的函数

因此,您需要使用str_to_date转换数据:


MySQL不知道您打算将某个字符串列作为日期,所以所有比较都是作为字符串进行的。您还应该习惯使用ISO标准YYYY-MM-DD格式来表示日期。

看起来您正在提交一个sin。将日期值存储为字符串。这很糟糕。SQL具有内置的日期数据类型和丰富的函数

因此,您需要使用str_to_date转换数据:

MySQL不知道您打算将某个字符串列作为日期,所以所有比较都是作为字符串进行的。您还应该习惯使用ISO标准YYYY-MM-DD格式来表示日期。

试试这个

SELECT id, date FROM table WHERE date BETWEEN STR_TO_DATE('09/10/2015','%d/%m/%Y') and STR_TO_DATE('09/23/2015','%d/%m/%Y');
试试这个

SELECT id, date FROM table WHERE date BETWEEN STR_TO_DATE('09/10/2015','%d/%m/%Y') and STR_TO_DATE('09/23/2015','%d/%m/%Y');

列数据类型?您是在比较日期还是字符串?日期列数据类型是varchar因为该列是varchar,所以您不是在比较日期,而是在比较字符串。如果可能,将列更改为日期类型。或者在比较数值之前先转换为日期。但为什么它能工作几天和几个月呢?纯粹是运气。。。按字母顺序排列。列数据类型?您是在比较日期还是字符串?日期列数据类型是varchar因为该列是varchar,所以您不是在比较日期,而是在比较字符串。如果可能,将列更改为日期类型。或者在比较数值之前先转换为日期。但为什么它能工作几天和几个月呢?纯粹是运气。。。按字母顺序排列。