【问题标题】:MySQL: How to get "this week's date" using the current date?MySQL:如何使用当前日期获取“本周日期”?
【发布时间】:2010-11-12 12:32:08
【问题描述】:

我有一个关于今天获取 5 个事件的 SQL 查询:

SELECT n.nid, n.type, n.title, nr.body, nr.teaser, FROM_UNIXTIME(e.event_start) start_date, FROM_UNIXTIME(e.event_end) end_date
FROM node n
LEFT JOIN event e ON n.nid = e.nid
LEFT JOIN node_revisions nr ON nr.nid = e.nid
WHERE n.`type` = 'event'
AND NOW() BETWEEN FROM_UNIXTIME(e.event_start) AND FROM_UNIXTIME(e.event_end)
ORDER BY n.`created` DESC
LIMIT 5

然后我需要使用“包括“今天”并从星期日开始的一周”来获取“本周的事件”。

如何在 MySQL 中做到这一点?

任何帮助将不胜感激。在此先感谢:)

干杯, 标记

【问题讨论】:

    标签: php sql date


    【解决方案1】:

    我不知道您是否有该选项,但出于性能原因,在您的程序代码中进行日期计算可能会更好。如果在 WHERE 子句中的列上使用函数,MySQL 就不能使用索引。一个简单的例子:http://netfactory.dk/2004/12/13/mysql-date-functions-and-indexes/ 大多数语言都应该有适合日期/时间操作的函数/库。

    【讨论】:

      【解决方案2】:

      您需要更好地定义“本周”——您是指以今天为中心的 7 天滑动窗口,还是从例如开始的一周(包括“今天”)在星期天?这完全取决于“本周”的语义,我们无法确定您所说的模棱两可的表达是什么意思。在您提到的两种方法中,根据您的意思,一种或另一种(或其变体)将是合适的。

      编辑:OP 在评论中澄清说,他的意思是“包括“今天”并从星期日开始的一周”——我从他对 FROM_UNIXTIME 的使用中推断出他针对的特定 SQL 方言是 MySQL。然后,WEEK(somedate, 0) 是 MySQL 函数,它应该给他他想要的东西,见mysql's docs

      具体来说,

      AND WEEK(CURDATE, 0) BETWEEN WEEK(FROM_UNIXTIME(e.event_start), 0)
                               AND WEEK(FROM_UNIXTIME(e.event_end), 0)
      

      应该是 OP 正在寻找的 WHERE 子句。

      【讨论】:

      • 嗨,亚历克斯,很抱歉我的问题不完整,因为我也不确定,但我确认了,正确的是“包括“今天”并从星期日开始的一周”:)跨度>
      • 非常感谢亚历克斯! :D 它奏效了。直到现在我还不熟悉 WEEK() 函数。现在可以了。干杯:)
      • @Christian,很高兴你喜欢它! @marknt15,总是乐于提供帮助。
      • 嗯,亚历克斯,我有一个后续问题。我正在尝试获取本月的所有记录。我有这个查询,但不起作用。你认为错误是什么? SELECT n.nid, n.type, n.title 从节点 n WHERE n.type = 'event' AND CURDATE() DATE_ADD (LAST_DAY(CURDATE()), 间隔 1 天) ORDER BY n.created DESC LIMIT 5 再次感谢。
      • 今天怎么可能比一个月前还多呢?这就是您要测试的内容,与数据库无关... WHERE 子句中的三倍curdate。
      【解决方案3】:

      根据表/列名称,您似乎正在使用 Drupal。您是否考虑过使用视图来实现您的目标?我无法从上下文中判断这是否是您正在编写的模块的一部分,在这种情况下继续插入,或者您是否只想在块中显示事件列表,在这种情况下,视图应该能够为您完成所有这些工作,而无需使用 PHP/SQL。

      【讨论】:

        【解决方案4】:

        我不确定这是针对 SQL Server 还是 MySQL,但在 MySQL 中,您可以获得当前的 weekday,然后使用 date_add 从当前日期(开始日期)中减去那么多天数使用开始日期,再次使用date_add 添加 7 天(结束日期)。

        希望对您有所帮助,如果您需要语法方面的帮助,请告诉我。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-07
          • 1970-01-01
          • 2023-02-08
          • 1970-01-01
          • 2018-07-24
          • 2017-01-08
          • 2020-09-19
          • 1970-01-01
          相关资源
          最近更新 更多