作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个匹配表。该表有一个名为 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"
函数?
最佳答案
投出你的 timestamp
值 date
如果你想要简单的语法。像这样:
SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
但是,对于大表,这会更快:
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
原因:第二个查询不必转换表中的每个值,可以在时间戳列上使用一个简单的索引。表达式是 sargable .
注意排除了正确选择的上限(<
而不是 <=
)。
您可以通过创建 index on an expression 来弥补这一点像这样:
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
然后第一个版本的查询将尽可能快。
关于ruby-on-rails-3 - 如何将一整天与日期时间字段匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833046/
我是一名优秀的程序员,十分优秀!