DATEDIFF в запросе MySQL - PullRequest
       11

DATEDIFF в запросе MySQL

2 голосов
/ 09 августа 2011

Я бы хотел использовать функцию 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. Я пробовал названия столбцов с и без обратных галочек без разницы. Мой синтаксис неверен или я нарушаю какое-то правило языка SQL?

Удаление части DATEDIFF делает запрос гладким.

надеюсь, что кто-то может помочь.

спасибо

1 Ответ

8 голосов
/ 09 августа 2011

Вы не можете использовать псевдонимы, которые вы определили в разделе select и where того же запроса (но вы можете использовать в group by, having, 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
...