在我的项目中,其中一项任务是运行每天报告所有新报告和在过去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可以将日期转换为一天吗?
答案 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)