【问题标题】:Select day of week from date从日期中选择星期几
【发布时间】:2011-05-11 16:16:30
【问题描述】:

我在 MySQL 中有下表记录每天发生的事情的事件计数

event_date     event_count
2011-05-03     21
2011-05-04     12
2011-05-05     12

我希望能够按日期范围和星期几有效地查询。例如 - “5 月星期二的 event_count 是多少?”

目前 event_date 字段是日期类型。 MySQL 中是否有任何函数可以让我按星期几查询此列,或者我应该在表中添加另一列来存储星期几?

该表将包含数十万行,因此如果可以选择,我将选择最有效的解决方案(而不是最简单的解决方案)。

【问题讨论】:

  • 感谢您精心编写的问题。仅供参考 - 问候和标题标签在 SO 上不受欢迎,因为它不是论坛。希望你能找到你想要的答案。

标签: mysql


【解决方案1】:

在查询中使用DAYOFWEEK,例如:

SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;

这将找到五月星期六的所有信息。

为了获得最快的读取,存储一个非规范化字段,即星期几(以及您需要的任何其他内容)。这样您就可以索引列并避免全表扫描。

只需先尝试上述方法,看看它是否符合您的需求,如果不符合,请添加一些额外的列并在写入时存储数据。请注意更新异常(如果您更改 event_date,请确保更新 day_of_week 列)。

请注意,非规范化字段会增加执行写入所需的时间、增加写入计算并占用更多空间。确保您确实需要这种好处,并且可以衡量它是否对您有帮助。

【讨论】:

  • 对于 2012 年,DAYOFWEEK 在 2008 年之后无法识别。对于 2012 年,请改用 DAY。很好的回应,只是想为其他想在较新版本的 SQL Server 上执行此操作的人做笔记。
【解决方案2】:

检查DAYOFWEEK()函数

【讨论】:

    【解决方案3】:

    如果您想要星期几的文本表示 - 使用 DAYNAME() 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多