Postgres日期问题
Postgres date issue
我正在尝试 select 来自 table 的日期为 2018 年 12 月 1 日的记录。
即使有几条记录,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')
这种奇怪行为的原因是什么?
我必须在 where 条件下以 dd-mm-yyyy 格式提供日期。
关于为什么您的查询不起作用的解释:
to_date('01-12-2018', 'dd-mm-yyyy')
创建一个 date 值(即使您指定了时间部分),因此当您将其与时间戳进行比较时,就好像您正在比较那个具有时间部分设置为 00:00:00
.
的时间戳值
所以你的第一个查询基本上是一样的:
where "DateOfTransaction" >= timestamp '2018-12-01 00:00:00'
and "DateOfTransaction" <= timestamp '2018-12-01 00:00:00'
这只会 return 行恰好包含 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
我正在尝试 select 来自 table 的日期为 2018 年 12 月 1 日的记录。 即使有几条记录,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')
这种奇怪行为的原因是什么? 我必须在 where 条件下以 dd-mm-yyyy 格式提供日期。
关于为什么您的查询不起作用的解释:
to_date('01-12-2018', 'dd-mm-yyyy')
创建一个 date 值(即使您指定了时间部分),因此当您将其与时间戳进行比较时,就好像您正在比较那个具有时间部分设置为 00:00:00
.
所以你的第一个查询基本上是一样的:
where "DateOfTransaction" >= timestamp '2018-12-01 00:00:00'
and "DateOfTransaction" <= timestamp '2018-12-01 00:00:00'
这只会 return 行恰好包含 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