【问题标题】:how to get data between two date with two different year?如何在两个不同年份的两个日期之间获取数据?
【发布时间】:2014-01-02 22:21:14
【问题描述】:

我下面的查询似乎不起作用。

SELECT * FROM `test` WHERE date between '12/30/2013' and '01/05/2014'

但是当我像下面这个查询一样更改日期顺序时,它似乎正在工作

SELECT * FROM `test` WHERE date between '01/01/2014' and '01/05/2014'

在 SELECT 中使用日期范围的正确方法是什么?

【问题讨论】:

  • 你可以试试SELECT * FROM test where date between '30/12/2013' and '01/05/2014'
  • 不工作是什么意思?错误还是没有结果?
  • 为什么不试试<> 运算符?

标签: php mysql


【解决方案1】:

它不起作用,因为日期不是 ISO 8601 格式:例如“2013-12-30”。

BETWEEN 子句进行字符串比较,因此您需要在数据库中使用正确的日期格式,或者使用DATE_FORMAT()STR_TO_DATE(str,format) 格式化日期。

编辑: 试试这个查询,如果您将日期存储为格式为%m/%d/%Y 的字符串,这将起作用,这是一个坏主意,MySQL 有一个内置的DATE 格式:

SELECT * FROM test where STR_TO_DATE(date, '%m/%d/%Y') between STR_TO_DATE('01/01/2014', '%m/%d/%Y') and STR_TO_DATE('01/05/2014','%m/%d/%Y');

DATE_FORMAT MySQL 将 DATEDATETIME 值作为第一个参数,您不使用它,这就是它不起作用的原因(除了您使用的 '$' 而不是 '% '在'Y'之前)

【讨论】:

  • SELECT * FROM test where date between DATE_FORMAT('01/01/2014','%m/%d/%Y') 和 DATE_FORMAT('01/05/2014',' %m/%d/$Y') 它尝试了这个但不起作用
【解决方案2】:

php和sql一起使用得到如下结果

$date1 = date("Y-m-d", strtotime('12/30/2013'));

$date2 = date("Y-m-d", strtotime('01/05/2014'));

$sql    =   "SELECT * FROM `test` WHERE date between '".$date1."' 
                     and '".$date2."'";

【讨论】:

    【解决方案3】:

    select * from test where date between "2013-12-30" and "2014-01-05"

    这样就可以了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多