我想从表中选择记录2018十二月一日日。即使有几个记录的Postgres没有返回任何。
查询:
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条件。
至于为什么你的查询是不工作的解释:
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