2011-08-08 87 views
2

我想使用的功能DATEDIFF像這樣的MySQL查詢:DATEDIFF在MySQL查詢

SELECT `ItemType`, 
     `DateOpen` AS StartDate, 
     IFNULL (`DateClosed`, CURDATE()) AS EndDate, 
     DATEDIFF(`EndDate`, `StartDate`) AS ItemLife 
FROM `Items` 
WHERE `ProjectID`=11 
ORDER BY `ItemType` ASC 

上面的查詢失敗,因爲DATEDIFF部分。我嘗試使用和不使用back ticks的列名,沒有區別。我的語法錯了嗎?還是我違反了一些SQL語言規則?

DATEDIFF部分取出使查詢順利運行。

希望有人能幫忙。

感謝

+1

如果我明白你正在嘗試使用不符合的日期內的EndDate。你需要使用上面那個行中的函數。 –

回答

8

不能使用別名,你在同一個查詢的selectwhere部分 定義(但你可以在group byhaving,子查詢中定義order by和別名)

SELECT `ItemType`, 
     `DateOpen` AS StartDate, 
     IFNULL (`DateClosed`, CURDATE()) AS EndDate, 
     DATEDIFF(IFNULL (`DateClosed`, CURDATE()), `DateOpen`) AS ItemLife 
FROM `Items` 
WHERE `ProjectID`=11 
ORDER BY `ItemType` ASC 

SELECT t.*, 
     DATEDIFF(`EndDate`, `StartDate`) AS ItemLife 
FROM (
    SELECT `ItemType`, 
      `DateOpen` AS StartDate, 
      IFNULL (`DateClosed`, CURDATE()) AS EndDate 
    FROM `Items` 
    WHERE `ProjectID`=11 
    ORDER BY `ItemType` ASC 
) t 
+0

嘿伊姆雷,感謝您的詳細回覆。我將使用第一種格式。乾杯! – djeetee