Postgresql仅查询日期时间戳数据

时间:2015-04-16 15:35:35

标签: sql postgresql

我有这些数据。

enter image description here

这是我的查询

SELECT transaction_date
FROM 
tenant1.txn_transaction_record  where   '2015-04-14'

所述查询呈现空结​​果。是否可以仅使用日期查询时间戳字段?

3 个答案:

答案 0 :(得分:4)

当你这样做时:

transaction_date = '2015-04-14'

PG会将字符串'2015-04-14'转换为时间戳'2015-04-14 00:00:00'值。

如果你这样做:

transaction_date::date = '2015-04-14'

PG会将这两个值转换为日期(只有日期部分,没有时间部分),它会起作用。

但是......在WHERE CLARUSE中生成列时要小心,因为PG无法利用包含该列的索引,除非您在列上创建了具有相同强制转换的索引。

如果只创建此索引:

create index i_foo_1 on foo ( timestamp_field );

此查询不会使用该索引:

select * 
from   foo 
where  timestamp_field::date = '2015-04-15';

所以,或者你需要创建一个aditional索引:

create index i_foo_2 on foo ( timestamp_field::date );

或者您必须更改原来的“where子句”:

select * 
from   foo 
where  timestamp_field >= ('2015-04-15'::timestamp) 
and    timestamp_field < (('2015-04-15'::date)+1)::timestamp; 

答案 1 :(得分:3)

不,如果你喜欢transaction_date = '2015-04-14'它会自动搜索transaction_date = '2015-04-14T00:00:00'所以你不会产生任何结果。因此,如果您想搜索日期,请尝试transaction_date::date = '2015-04-14'
所以最后的问题是,

SELECT transaction_date
FROM 
tenant1.txn_transaction_record  where  transaction_date::date = '2015-04-14'

答案 2 :(得分:1)

SELECT transaction_date
FROM 
tenant1.txn_transaction_record  where   date_trunc('day', transaction_date) = '2015-04-14 00:00:00'

我没有postgres数据库可以尝试: - )