sql - 从带有时区列的时间戳中选择匹配日期

标签 sql postgresql datetime select

我有一个带时区的时间戳列,我想在其中运行查询以返回所有匹配的日期。例如。我想要所有具有日期为 2019-09-30 的时间戳的行。我正在尝试这样的事情,但一直无法弄清楚:

SELECT * FROM table WHERE
x='1277' AND
date='2019-09-30 21:40:01.316240 +00:00'::DATE;

最佳答案

有两种选择:

  1. 范围搜索:

    WHERE timestampcol >= TIMESTAMPTZ '2019-09-30'
      AND timestampcol < (TIMESTAMPTZ '2019-09-30' + INTERVAL '1 day')
    

    使它变快的正确索引是

    CREATE INDEX ON atable (timestampcol);
    
  2. 转换为日期:

    WHERE CAST(timestampcol AS date) = '2019-09-30'
    

    使它变快的正确索引是

    CREATE INDEX ON atable ((CAST(timestampcol AS date)));
    

这两种方法都同样有效。第二种方法有一个较短的 WHERE 子句,但是一个可能没有其他查询可以从中受益的专用索引。

关于sql - 从带有时区列的时间戳中选择匹配日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58236096/

相关文章:

sql - 存储过程不返回任何行,但相同的查询返回正确的数据

sql - 删除查询非常慢

mysql - 使用不同的 where 语句在 MySQL 查询中选择多个计数

php - Laravel 本地主机工作,但 heroku 给出 500 错误

postgresql - Feather.js + Sequelize + postgres 11 : How to patch a jsonb column?

date - ClojureScript 日期时间库

sql - 合并两个表并添加数量

python - Django 模型和 PostgreSQL 货币类型

PHP:替换 DateTime 对象

NHibernate DateTimeOffsetType代理源码?