【问题标题】:Query a database 'within this week' for date查询数据库“本周内”的日期
【发布时间】:2016-01-11 12:28:50
【问题描述】:

我想使用以下查询:

SELECT concat(firstname,' ', surname) AS 'Fname', 
MAX(CASE WHEN DAYOFWEEK(date) = 1 THEN concat(starttime,'-', endtime) END) `Sunday`,
MAX(CASE WHEN DAYOFWEEK(date) = 2 THEN concat(starttime,'-', endtime) END) `Monday`,
MAX(CASE WHEN DAYOFWEEK(date) = 3 THEN concat(starttime,'-', endtime)  END) `Tuesday`,
MAX(CASE WHEN DAYOFWEEK(date) = 4 THEN concat(starttime,'-', endtime)  END) `Wednesday`,
MAX(CASE WHEN DAYOFWEEK(date) = 5 THEN concat(starttime,'-', endtime)  END) `Thursday`,
MAX(CASE WHEN DAYOFWEEK(date) = 6 THEN concat(starttime,'-', endtime)  END) `Friday`,
MAX(CASE WHEN DAYOFWEEK(date) = 7 THEN concat(starttime,'-', endtime)  END) `Saturday`
FROM shifts NATURAL JOIN employees
GROUP BY Fname, date

并以某种方式修改它以仅显示 THIS WEEKS 值,如下所示:

SELECT concat(firstname,' ', surname) AS 'Fname', 
MAX(CASE WHEN (DAYOFWEEK(date) = 1 AND WITHIN THIS WEEK) THEN concat(starttime,'-', endtime) END) `Sunday`,
etc... etc...

这可以通过 mySQL 实现吗?

【问题讨论】:

  • 您是否考虑过 BETWEEN 语句的工作原理?

标签: php mysql case increment


【解决方案1】:

问题是:您指的是哪一周?我将使用 select 语句的 where 条件部分来过滤期间,但是,您需要定义您正在谈论的星期。

  1. 如果您知道一周的确切开始和结束日期,请在 ... 和 ... 之间使用:

    ... ...和...之间的日期

  2. 使用week()(或 weekofyear())和 year() 函数来获取一周的日期(请注意,一周的开始日期是一个可配置的变量,有关详细信息,请参阅 week() 的链接):

    ... 其中年(日期)=... 和周(日期)=...

  3. 和上一个逻辑一样,只是用date_format()得到年周组合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2017-05-11
    • 2023-03-18
    相关资源
    最近更新 更多