选择年份不工作的日期-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,所以您不是在比较日期,而是在比较字符串。如果可能,将列更改为日期类型。或者在比较数值之前先转换为日期。但为什么它能工作几天和几个月呢?纯粹是运气。。。按字母顺序排列。