Как получить общее количество (разница между двумя датами)?

У меня есть таблица [праздники] со следующей структурой:

идентификатор | дата_начала | дата_окончания | ID пользователя

Как получить количество отпусков для пользователя в предыдущем году?

Я хочу что-то подобное с правильным синтаксисом:

SELECT SUM(end_date - start_date)
FROM holidays
WHERE user_id = 342
    AND YEAR(end_date) = YEAR(CURRENT) - 1

person Anyname Donotcare    schedule 15.09.2013    source источник


Ответы (2)


Я думаю, что это должно работать в informix:

SELECT SUM(end_date-start_date)
from holidays
where user_id = 342 and
     YEAR(end_date) = YEAR(TODAY)-1;

Примечание: неясно, является ли дата окончания включенной или нет. Вы можете захотеть:

SELECT SUM((end_date-start_date) + 1)
from holidays
where user_id = 342 and
     YEAR(end_date) = YEAR(TODAY)-1;
person Gordon Linoff    schedule 15.09.2013

Ваш запрос в порядке. У вас нет никаких улучшений синтаксиса. Единственное, чем подход Гордона Линоффа (который будет работать) отличается от вашего, это то, что он использует TODAY (то есть YEAR TO DAY) вместо CURRENT (то есть YEAR TO FRACTION), но YEAR(CURRENT) и YEAR(TODAY) дадут точно такой же результат.

Единственный способ получить другой результат, это если бы у вас было CURRENT внутри SUM, например SUM(CURRENT-start_date). Таким образом, у вас будет больше точности, чем только дни (вы получите дни, а затем чч: мм: сс.фф), как вы хотите, но если вы используете TODAY, вы получите только дни.

Кроме этого, это совершенно нормально.

person Filipe Silva    schedule 15.09.2013