SQL CURRENT_DATE没有收集我期望的结果

时间:2016-08-22 20:56:01

标签: mysql phpmyadmin

三个关键细节。

  1. 我是通过phpMyAdmin中的SQL查询函数直接执行此操作

  2. 正在运行的查询如下:

    json.extract! @experiment, :id, :name, :description, :created_at, :updated_at
    
  3. 我的数据如下:

    SELECT * FROM `leaderboard` 
    WHERE date > (CURRENT_DATE() - 30) 
    ORDER BY time DESC
    
  4. 这是我表中的所有数据,但也是我运行此查询时得到的确切响应。让我感到困惑的是,当前日期(2016-08-16)至少比2016-07-04还要早40天,那么为什么ID 46会被作为有效结果通过?

    更新:此外,查询

    id  room  team                    time  fte  date
    46  adod  Old But Amazing         372   0    2016-07-04 15:13:56
    40  adod  The Inappropriates      315   0    2016-08-22 15:11:58
    41  adod  Chelsea Hens            254   0    2016-08-22 15:12:13
    42  adod  Serco-Top Of The Board  221   0    2016-08-22 15:12:44
    43  adod  Gradually Escaping      165   0    2016-08-22 15:13:05
    44  adod  The Lamb Marlborough    105   0    2016-08-22 15:13:29
    45  adod  Failure                 0     1    2016-08-22 15:13:38
    

    不会返回ID 46

2 个答案:

答案 0 :(得分:3)

而不是:

(CURRENT_DATE() - 30)

使用:

SUBDATE(CURRENT_DATE(), 30)

这是因为第一个表达式使用当前日期作为YYYYMMDD格式的数字,即20160822,然后从中减去30,给出20160792,从而产生意外结果。

答案 1 :(得分:1)

DATE是MySQL中的保留字,它的计算结果为当前日期。

因此,您的WHERE语句是常量,它也可以WHERE 5 > 1。它将始终选择所有行。

为该列尝试不同的名称。