使用日作为变量选择值

Selecting values using day as a variable

在我的项目中,其中一项任务是 运行 每日报告所有新报告和在过去 24 小时内完成的工作,很简单。 然而,他们提出了一个有趣的说法,即维修人员周末不工作,但报告自然仍会收到。因此,周一早上将生成一份报告,显示过去 3 天的所有报告,例如周五和进行的任何维修周五类似于下面的代码。

我发现一个不切实际的解决方案是显示两个日期字段和用户 select 的周五和周一日期,就像我在下面为另一个功能生成的代码一样。

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"

我希望能够将 if 语句与嵌套 sql 语句一起使用 if day = Monday show * <3days if not show * <1 day。

select 语句是一个问题我正在努力寻找有关一天变量的任何信息,例如点击 CURDATE() 会 select 当前日期但可以 SQL 将日期转换为一天?

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

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

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() 函数 returns 0 用于星期一,并将导致以下 where 子句在星期一应用:

WHERE `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY

如果函数 returns 其他任何东西(从 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

有点像这样(?):

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)