|
|
1
4
对于这样的应用程序,如果您使用的是PostgreSQL 9.2或更高版本,您可能需要尝试 range type 。以下是创建、加载和显示数据的示例:
id | user_id | avail ----+---------+----------------------------------------------------- 1 | 1 | ["2013-03-18 08:00:00-05","2013-03-18 17:00:00-05") 2 | 1 | ["2013-03-19 08:00:00-05","2013-03-19 17:00:00-05") 3 | 2 | ["2013-03-17 00:00:00-05","2013-03-24 00:00:00-05") 4 | 3 | ["2013-03-20 06:00:00-05","2013-03-20 18:00:00-05") (4 rows) 然后您可以使用各种运算符进行查询。如果您想要包含的所有可用性范围 任何 指定的查询范围中的一个:
或:
id | user_id | avail ----+---------+----------------------------------------------------- 3 | 2 | ["2013-03-17 00:00:00-05","2013-03-24 00:00:00-05") 4 | 3 | ["2013-03-20 06:00:00-05","2013-03-20 18:00:00-05") (2 rows) 如果您想要包含的所有可用性范围 全部的 指定查询范围的 在单个范围内 :
或:
id | user_id | avail ----+---------+----------------------------------------------------- 3 | 2 | ["2013-03-17 00:00:00-05","2013-03-24 00:00:00-05") (1 row) 如果您想要包含的所有可用性范围 任何 在指定的查询范围中, 但仅适用于具有以下可用性范围的用户 全部的 指定查询范围的 :
或(调整Clodoaldo-Neto的查询以使用范围):
您可以创建一个索引,以便在这样的大表上快速进行搜索:
笔记:
|
|
|
2
3
这利用了将布尔型转换为0或1的整数。
更改
|
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
|
Peter Schofield · 类型转换Postgresql 1 年前 |
|
|
Kevin Smeeks · Pyspark JDBC分区读取 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |