1

我正在写一些关于我数据库中一些事件的字段,我想我可以这样做:

rangeType (varchar) (may be: daily, weekly, monthly, yearly)
rangeStart (datetime)
rangeEnd (datetime)

我想NOW()在时间范围内匹配记录:

  • 何时rangeType'yearly',如果日期NOW()介于 和 的月+日rangeStart之间rangeEnd

  • 如果在和之间是rangeType什么时候'monthly'NOW()rangeStartrangeEnd

  • 什么时候如果rangeType是......'weekly'NOW()

  • 如果rangeType'daily'的时间NOW()是什么时候......

我觉得这里每周需要特殊对待,整体结构不是那么灵活……

那我需要更多的领域!但我想要一些易于阅读和维护的东西……用 MySQL 做这件事的最好方法是什么?是否有一些功能可以让我在不编写和维护 SQL 行和行的情况下做到这一点?

那么 ISO8601 周期规范呢?

4

1 回答 1

2

像这样的东西?

SELECT ...
WHERE CASE rangeType
  WHEN 'daily'   THEN TIME(      NOW()) BETWEEN TIME(      rangeStart) AND TIME(      rangeEnd)
  WHEN 'weekly'  THEN DAYOFWEEK( NOW()) BETWEEN DAYOFWEEK( rangeStart) AND DAYOFWEEK( rangeEnd)
  WHEN 'monthly' THEN DAYOFMONTH(NOW()) BETWEEN DAYOFMONTH(rangeStart) AND DAYOFMONTH(rangeEnd)
  WHEN 'yearly'  THEN DAYOFYEAR( NOW()) BETWEEN DAYOFYEAR( rangeStart) AND DAYOFYEAR( rangeEnd)
END
于 2012-05-17T14:11:41.740 回答