【问题标题】:SELECT BETWEEN dates not working for year - MySQLSELECT BETWEEN 日期不适用于年份 - MySQL
【发布时间】:2015-09-24 11:40:51
【问题描述】:

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

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。

【问题讨论】:

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

标签: mysql sql select


【解决方案1】:

看起来你正在犯罪。 . .将日期值存储为字符串。这是不好的。 SQL 具有内置的日期数据类型和丰富的函数。

所以,你需要转换数据,使用str_to_date():

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

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

【讨论】:

    【解决方案2】:

    试试这个....

    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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2017-01-01
      • 2011-03-02
      相关资源
      最近更新 更多