2013-11-24 31 views
1

我有一張描述未來航班到達時間的表格。在每次航班到達時間已過(或過期)後,我希望查詢通過插入下一個到達時間來更新到達時間,這通常是從當前日期/時間開始的一週。爲什麼我的更新查詢對我的表格內容有影響?

儘管我的查詢不會產生任何錯誤消息,但它對於過期的到達時間沒有影響,因爲它應該如此。

找到下面的查詢:

//更新應在航班已經到達後的第31分鐘和小時之間發生。

UPDATE flightSched 
SET `arrivalTime`= ADDDATE(NOW(), INTERVAL 1 WEEK) 
WHERE arrivalTime BETWEEN SUBTIME(NOW(), '00:31:00') 
       AND SUBTIME(NOW(),'01:00:00') 
       ORDER BY arrivalTime ASC 

查找下面我表的simlpe版本:

+-------------+---------------------+ 
| FlightNo | arrivalTime   | 
+-------------+---------------------+ 
| ET821  | 2013-11-24 08:05:24 | 
| MS838  | 2013-11-24 10:05:24 | 
| H7361  | 2013-11-24 13:15:06 | 
+-------------+---------------------+ 

如果當前時間是09:45,然後航班號ET821到達時間應更新爲2013年12月1日08:05 :24,請幫我理解爲什麼這個更新不會發生?

+0

你看,當你輸入SELECT SUBTIME什麼樣的價值(NOW(),00:31:00' )?另外,ORDER BY僅在返回結果時用於SELECT查詢。沒有結果返回UPDATE查詢,所以沒有什麼可以訂購。 – WebChemist

+0

如果當前時間是'09:45',那麼根據您的要求,'MS838'的到達時間應該改變,而不是'ET821'。對? – peterm

+0

@peterm正確MS838應該改變 – SirBT

回答

2

由於WHERE子句中的日期範圍不正確,您的更新不會產生任何結果。 BETWEEN運算符中的上限值小於下限值。

根據您的需求,而不是

BETWEEN SUBTIME(NOW(), '00:31:00') AND SUBTIME(NOW(),'01:00:00') 
             ^^^^^^^ 

應該至少

BETWEEN SUBTIME(NOW(), '00:31:00') AND ADDTIME(NOW(),'01:00:00') 
             ^^^^^^^ 

嘗試用另一種方式

UPDATE flightSched 
    SET arrivalTime = arrivalTime + INTERVAL 1 WEEK 
WHERE arrivalTime >= NOW() - INTERVAL 31 MINUTE 
    AND arrivalTime <= NOW() + INTERVAL 1 HOUR 

注:確保您有arrivalTime列索引。

這裏是SQLFiddle演示

+0

感謝這很有用! – SirBT

+0

@SirBT你非常歡迎。我很高興我可以幫助:) – peterm

相關問題