DATEDIFF SQL查询

时间:2016-04-07 09:06:47

标签: mysql sql datediff

我正处于项目的最后阶段,并且有问题要找工作是否过期。我将此链接到优先级,例如,如果作业的优先级为1,则必须在1天内完成,优先级为4,然后为4天。

我想出了一个案例但是这似乎没有任何帮助,我们将不胜感激。

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 个答案:

答案 0 :(得分: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> 

答案 1 :(得分:0)

如果date_InvestigationDATE列,则减法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...]

将方括号([...])中的部分替换为从中获取数据的表的名称以及一些限制返回行数的条件(否则它将获得整个表,最有可能,不是你想要的。)

顺便说一下,CURRENT_DATE()也是一个功能。如果你用反引号(``)编写它,MySQL将尝试找到一个具有此名称的列,它将失败。

阅读this question的已接受答案。它解释了何时在MySQL中使用反向标记,单引号或双引号(部分用于PHP)。