使用day作为变量选择值

时间:2016-03-22 19:34:34

标签: mysql sql datetime days

在我的项目中,其中一项任务是运行每天报告所有新报告和在过去24小时内完成的工作。 然而,就修理人员周末无法工作而言,他们投入了一个有趣的事情,但报告当然仍然可以进入。所以星期一早上会有报告显示过去3天的所有报告,例如星期五和任何维修在fri上类似于下面的代码。

我找到一个解决方案的解决方案是显示两个日期,并且用户选择fri&像我在下面为另一个函数制作的代码一样的日期。

SELECT `defect_Id`, `job_Id`, `date_On_Task`, `description`, `resolved` 
FROM `job`
WHERE `date_On_Task` >= '$date1'
AND `date_On_Task` <= '$date2'
AND `repair_Team` = '$repair_Team'
AND `resolved` = 3"

如果day = Monday show *&lt; 3天不显示*&lt; 1天,我希望能够使用带有嵌套sql语句的if语句。

select语句是一个问题,我很难找到关于某一天变量的任何信息,例如点击CURDATE()会选择当前日期,但SQL可以将日期转换为一天吗?

2 个答案:

答案 0 :(得分:0)

您可以从应用程序中删除两个日期选择器。

为此,您可以使用WHERE语句在CASE子句中应用逻辑:

WHERE 
  CASE WHEN WEEKDAY(CURRENT_DATE) = 0 
       THEN `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY
       ELSE `date_On_Task` = CURRENT_DATE - INTERVAL 1 DAY
  END

WEEKDAY()函数在星期一返回0,并将导致以下where子句在星期一适用:

WHERE `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY

如果该函数返回任何其他内容(从1到6表示星期二到星期日),则获取昨天执行的作业。

从特定日期减去天数很简单。您可以使用DATE_SUB()或减去INTERVAL

<DATE HERE> - INTERVAL <NUMBER HERE> DAY

您的完整查询会显示:

SELECT `defect_Id`, `job_Id`, `date_On_Task`, `description`, `resolved` 
FROM `job`
WHERE 
  CASE WHEN WEEKDAY(CURRENT_DATE) = 0 
       THEN `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY
       ELSE `date_On_Task` = CURRENT_DATE - INTERVAL 1 DAY
  END
  AND `repair_Team` = '$repair_Team'
  AND `resolved` = 3

答案 1 :(得分:0)

有点像这样(?):

WHERE
    [date_On_Task] BETWEEN
    CASE
        WHEN DATENAME(DW, GETDATE()) = 'Monday' THEN CAST(GETDATE() - 3 AS date)
        WHEN DATENAME(DW, GETDATE()) = 'Sunday' THEN CAST(GETDATE() - 2 AS date)
        ELSE CAST(GETDATE() - 1 AS date)
    END
        AND
    CAST(GETDATE() AS date)