1

私は自分のデータベースのいくつかのイベントについていくつかのフィールドを書いています、そして私は私がでできると思っていました:

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

時間の範囲内にあるときにレコードを照合したいNOW()

  • の場合、日付がrangeType月と日の間にある場合'yearly'NOW()rangeStartrangeEnd

  • との日の間に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 に答える