【问题标题】:Selecting values using day as a variable使用天作为变量选择值
【发布时间】:2016-03-22 19:34:34
【问题描述】:

在我的项目中,其中一项任务是轻松运行在过去 24 小时内执行的所有新报告和作业的每日报告。 然而,他们提出了一个有趣的问题,维修人员周末不工作,但报告自然还是会进来。所以周一早上将生成一份报告,显示过去 3 天的所有报告,例如周五和进行的任何维修在星期五类似于下面的代码。

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

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 *

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

【问题讨论】:

    标签: mysql sql datetime days


    【解决方案1】:

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

    为此,您可以使用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() 函数返回星期一的 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
    

    【讨论】:

    • 我的代码就是这样做的。请再次阅读答案。 WEEKDAY() 函数返回周一的 0
    【解决方案2】:

    有点像这样(?):

    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)
    

    【讨论】:

    • 这是我希望看到的更多内容,您可以假设经理周末也不会访问 Intranet 站点,因此不需要周日声明。
    • 是的,这取决于你想如何使用逻辑,但这是一般的想法。如果您确信它永远不会被使用,您可以删除“星期日”行。
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多