如何将一整天与日期时间字段匹配?

Fre*_*III 1 postgresql select datetime timestamp ruby-on-rails-3

我有一张比赛桌.该表有一个名为的列matchdate,它是一个datetime字段.

如果我在2011-12-01有3场比赛:

  • 2011-12-01 12:00:00
  • 2011-12-01 13:25:00
  • 2011-12-01 16:00:00

我如何查询?如何在1个单一日期查询所有比赛?

我已经看过了date_trunc(),to_char()
是不是有一些"select * where datetime in date"功能?

Erw*_*ter 5

如果您想要简单的语法timestamp,date请将您的值转换为.像这样:

SELECT *
FROM   tbl
WHERE  timestamp_col::date = '2011-12-01';  -- date literal
Run Code Online (Sandbox Code Playgroud)

但是,使用大表格会更快:

SELECT *
FROM   tbl
WHERE  timestamp_col >= '2011-12-01 0:0'    -- timestamp literal
AND    timestamp_col <  '2011-12-02 0:0';
Run Code Online (Sandbox Code Playgroud)

原因:第二个查询不必转换表中的每个值,并且可以在timestamp列上使用简单索引.表达是可以理解的.

注意排除上限(<而不是<=)正确选择.
您可以通过在表达式上创建索引来弥补这一点,如下所示:

CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Run Code Online (Sandbox Code Playgroud)

然后查询的第一个版本将尽可能快.