2016-04-07 4 views
-1

Я нахожусь на заключительном этапе моего проекта и имею проблему, чтобы найти, если работа просрочена. Я связываю это с приоритетом, например, если задание имеет приоритет 1, оно должно быть завершено за 1 день, приоритет - 4, а затем 4 дня.DATEDIFF SQL Query

Я придумал CASE, однако это, похоже, не поможет.

SELECT `defect_Id`,`Overtasked` 
WHERE 
    CASE DATEDIFF(DD,`date_Investigaton` - `CURRENT_DATE()`) >= `priority` AS Overtasked 
    THEN `Overtasked` == 'YES' 
    ELSE `Overtasked` == 'NO' 
END 

Решение

`SELECT defect_Id, 
    CASE WHEN DATEDIFF(date_Investigated, CURDATE()) >= priority 
    THEN 'YES' 
    ELSE 'NO' 
    END AS Overtasked 
    FROM defect_report 
    WHERE defect_Id = '82'` 

Цените руководство вы, ребята, даете!

+2

Тег dbms используется. Некоторые не ANSI SQL там ... – jarlh

+0

Также удалите обратные тики вокруг current_date(). – jarlh

+0

Я использую сервер WAMP и PHP myAdmin –

ответ

0

Вы полностью смешиваете диалекты SQL и даже имеете синтаксические ошибки. Предполагая, что вы говорите о MS SQL Server, давайте попробуем это:

SELECT defect_Id, 
     CASE WHEN DATEDIFF(DD, date_Investigaton, getdate()) >= priority 
      THEN 'YES' 
      ELSE 'NO' 
     END AS Overtasked 
FROM <YourTable> 
WHERE <YourWhereIfAny> 
+0

Я предполагаю, что back-ticks подразумевает MySQL. – jarlh

0

Если date_Investigation является DATE колонна, Вычитание date_Investigation - CURRENT_DATE() производит количество дней вам нужно.

В противном случае (если это DATETIME, например) оба операнда converted to float, и результат - это то, чего вы полностью не ожидаете. Для таких ситуаций используйте функцию DATEDIFF(). Он интерпретирует свои аргументы как DATE (игнорирует часть времени) и возвращает целое число дней между двумя датами.

Ваш запрос должен быть как:

SELECT 
    `defect_Id`, 
    IF (DATEDIFF(`date_Investigaton`, CURRENT_DATE()) >= `priority`, 'YES', 'NO') 
     AS `Overtasked` 
FROM [...your table name here...] 
WHERE [...conditions...] 

Заменить части в квадратных скобках ([...]) с именем таблицы, где можно получить данные и некоторые условия, чтобы ограничить количество возвращаемых строк (в противном случае он получит всю таблицу, которая, скорее всего, не то, что вы хотите).

Btw, CURRENT_DATE() также является функцией. Если вы напишете его в backquotes (``), MySQL попытается найти столбец с этим именем, и он потерпит неудачу.

Прочтите принятый ответ за this question. В нем объясняется, когда использовать обратные тики, одинарные кавычки или двойные кавычки в MySQL (и частично в PHP).