如何存储计划时间块并对其进行查询?

How to store schedule time blocks and query against them?

我正在使用 postgres 并想知道我应该如何以允许我执行以下操作的方式存储计划时间块:

如果我有一个包含 3 个时间段的时间表:

  1. 周一上午 8 点到中午 12 点
  2. 周一上午 10 点到下午 4 点
  3. 星期四上午 8 点到中午 12 点

我正在尝试查找周一至周三上午 8 点开始的所有时间表。

我将 time_blocks 存储为 array,但我不确定如何查询它们。

我建议三列:

  • dow - 整数或字符串形式的星期几。两者都可以,整数最适合存储和性能。 (0 - 6;星期日为 0)
  • from - time 类型、时间
  • to - time 类型、时间

那么你可以select这样:

SELECT
  *
FROM
  "schedule"
WHERE
  -- Mon, Tue, Wed
  "dow" IN (1,2,3) AND
  '08:00:00'::time = "from"

您可以这样搜索早上 8 点或更早的时间: '08:00:00'::time BETWEEN "from" AND "to"