TLDR:我可以创建一个由以下WHERE子句使用的索引吗:
WHERE foo_date <@ tsrange('2018-01-01', '2018-02-01')
Run Code Online (Sandbox Code Playgroud)
创建表 foo
(
foo_id INTEGER 由默认身份生成,
不带时区的 foo_date 时间戳 NOT NULL,
约束 foo_pkey 主键 (foo_id)
);
此表包含 100,000 条记录,日期从2009-01-01到2018-12-29。我希望能够查询给定日期范围内的行(例如 2018 年 1 月的行)。
一种方法是使用BETWEEN运算符:
SELECT * FROM foo WHERE foo_date BETWEEN '2018-01-01' AND '2018-01-31';
这种方法的问题是,如果foo_date发生在2018-01-31午夜之后,它们将不会包含在此查询中。所以我可以将查询更改为BETWEEN '2018-01-01' AND '2018-02-01'. 那么问题来了,然而,上发生的记录2018-02-01 00:00:00。这些将被包括在内,这是我不想要的。
Aaron Bertrand提出的另一种选择是使用这个结构:
foo_date >= '2018-01-01' AND foo_date < '2018-02-01'
Run Code Online (Sandbox Code Playgroud)
(是的,此博客适用于 …