2016-08-22 51 views
0

三个关键位的细节。SQL CURRENT_DATE未收集结果我期望

  1. 我通过SQL查询功能,直接在phpMyAdmin

  2. 查询正在运行这样做是如下:

    SELECT * FROM `leaderboard` 
    WHERE date > (CURRENT_DATE() - 30) 
    ORDER BY time DESC 
    
  3. 我的数据如下:

    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 
    

这是我表中的所有数据,但也是我运行此查询时得到的确切响应。令我感到困惑的是,2016-07-16当前日期(2016-08-16)至少在2016-07-04之后40天,那么为什么ID 46会作为有效结果被拉出?

更新:而且,

SELECT * FROM `leaderboard` 
    WHERE date > (CURRENT_DATE() - 20) 
    ORDER BY time DESC 

查询将不会返回ID 46

+0

SQL-server或mysql? – Jens

+0

'date'列的数据类型是什么? –

+0

mysql我相信抱歉,误导标签! – Stu

回答

3

代替:

(CURRENT_DATE() - 30) 

使用:

SUBDATE(CURRENT_DATE(), 30) 

这是因为第一个表达式使用当前日期作为YYYYMMDD格式的数量,即20160822,然后从减去30 ,给予20160792,并因此出现意想不到的结果。

+0

完美。谢谢你,谢谢你解释! – Stu

1

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

因此,您的WHERE声明是不变的,它可能也是WHERE 5 > 1。它将始终选择所有行。

为该列尝试一个不同的名称。

+0

我刚刚更新了“添加”的列名,并尝试了20和30,产生的结果与上面的 – Stu

+0

完全相同,值得尝试。 C - := –