2016-08-22 68 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 - := –