Postgres的日期问题

问题描述 投票:0回答:1

我想从表中选择记录2018十二月一日日。即使有几个记录的Postgres没有返回任何。

enter image description here

查询:

select * 
from dbo."Transactions" 
where "DateOfTransaction"::timestamp >=to_date('01-12-2018', 'dd-mm-yyyy') 
  and "DateOfTransaction"::timestamp <=to_date('01-12-2018', 'dd-mm-yyyy') 

我也尝试:

 select * 
 from dbo."Transactions" 
where "DateOfTransaction"::timestamp >=to_date('01-12-2018 00:00:00', 'dd-mm-yyyy HH24:MI:SS') 
  and "DateOfTransaction"::timestamp <=to_date('01-12-2018 23:59:59', 'dd-mm-yyyy HH24:MI:SS') 

,这是什么奇怪的行为的原因是什么?我在给日期DD-MM-yyyy格式where条件。

sql postgresql postgresql-9.1
1个回答
4
投票

至于为什么你的查询是不工作的解释:

to_date('01-12-2018', 'dd-mm-yyyy')创建日期值(即使您指定时间部分),所以当你比较,与时间戳这是因为如果你比较这与其中部分时间被设定为00:00:00时间戳值。

所以,你的第一个查询本质上是相同的:

where "DateOfTransaction" >= timestamp '2018-12-01 00:00:00'
  and "DateOfTransaction" <= timestamp '2018-12-01 00:00:00'

这将只会返回包含正是2018-12-01 00:00:00


如何正确做呢?

你可以简单地把时间戳的日期,并与=比较

where "DateOfTransaction"::date = date '2018-12-01'

这将不能够在"DateOfTransaction"使用索引

如果您需要确保查询使用一个索引,你可以使用:

where "DateOfTransaction" >= DATE '2018-12-01'
  and "DateOfTransaction" < DATE '2018-12-01' + 1

需要注意的是投"DateOfTransaction"::timestamp是无用的列已经是timestamp

© www.soinside.com 2019 - 2024. All rights reserved.