我有一个带有“时区”列的时间戳,我想在其中运行一个返回所有匹配日期的查询。例如。我想要所有带有日期为2019-09-30的时间戳的行。我正在尝试类似的方法,但无法弄清楚:
SELECT * FROM table WHERE
x='1277' AND
date='2019-09-30 21:40:01.316240 +00:00'::DATE;
答案 0 :(得分:2)
有两种选择:
范围搜索:
WHERE timestampcol >= TIMESTAMPTZ '2019-09-30'
AND timestampcol < (TIMESTAMPTZ '2019-09-30' + INTERVAL '1 day')
要使其快速运行的正确索引是
CREATE INDEX ON atable (timestampcol);
转换为date
:
WHERE CAST(timestampcol AS date) = '2019-09-30'
要使其快速运行的正确索引是
CREATE INDEX ON atable ((CAST(timestampcol AS date)));
两种方法都可以很好地工作。第二种方法具有较短的WHERE
子句,但是专用索引可能没有其他查询可以受益。
答案 1 :(得分:0)
您可以在日期转换列值和固定日期值之间使用这样的排序规则:
<div class="main">
<img src="https://via.placeholder.com/300x100" />
</div>
答案 2 :(得分:0)
我不熟悉PostgreSQL,但是下一页https://www.postgresql.org/docs/9.1/datatype-datetime.html表示存在一个可选的精度值 p ,用于指定精度值。秒字段中保留的小数位数。如何为您的 日期 字段配置数据类型?时间戳列存储为八字节整数还是浮点数?如果是更高版本,则有效的精度限制可能小于6。所有这些信息都在上面的链接页面上。
答案 3 :(得分:0)
如前所述,您有几种选择,并且可能会有所不同,具体取决于名为“ date”的字段的数据类型。
例如,
SELECT * FROM table WHERE x='1277' AND date::DATE='2019-09-30';
“日期”紧随字段名称之后。
SELECT * FROM table WHERE x='1277' AND LEFT(date::varchar,10)='2019-09-30';
SELECT * FROM table WHERE x='1277' AND to_char(date,'yyyymmdd')='20190930';
还有很多其他的。有关更多特定信息,您必须查看PostgreSQL文档以检查最适合您的文档,或发布更多信息,以便我们可以猜测更多有关您的问题。