如何使用默认时间戳定义今天的日期

时间:2013-10-07 07:01:46

标签: postgresql date time

我正在使用postgressql我想获取currentdate的数据,我想根据日期过滤数据 在数据库中,我的plandate字段定义为Time stamp with time zone,因此其显示格式为2013-09-01 03:22:01.438348+05:30我的查询就像这样

 select ttodoid ,date,details from ttodo where date=currentdate():

但是根据这个结果,currentdate函数给我的日期'2013-10-06'是没有行我怎么能管理它今天的日期细节

3 个答案:

答案 0 :(得分:0)

更新:一种方法

SELECT *
  FROM ttodo
 WHERE date BETWEEN DATE_TRUNC('day', CURRENT_TIMESTAMP) 
                AND DATE_TRUNC('day', CURRENT_TIMESTAMP) 
                  + INTERVAL '1 DAY' 
                  - INTERVAL '1 MICROSECOND';

SELECT * 
  FROM ttodo
 WHERE date >= DATE_TRUNC('day', CURRENT_TIMESTAMP) 
   AND date <  DATE_TRUNC('day', CURRENT_TIMESTAMP) 
             + INTERVAL '1 DAY';

这是 SQLFiddle 演示

答案 1 :(得分:0)

从ttodo中选择*(ttodo.todoplandate :: date = current_date)或            (ttodo.todoplandate :: date&lt; current_date

答案 2 :(得分:0)

我认为更简单的方法就是将您的字段转换为date

SELECT ttodoid ,date,details FROM ttodo
WHERE CAST(date AS DATE) = current_date;

请注意,如果您希望将此查询编入索引,则必须使用强制转换创建索引:

CREATE INDEX idx_ttodo_date ON ttodo ((CAST(date AS DATE)));

另一种方法是,不是投射字段,而是检查间隔,类似于petern proposed,但间隔正确:

SELECT ttodoid ,date,details FROM ttodo
WHERE date >= date_trunc('day', current_timestamp)
      AND date < (date_trunc('day', current_timestamp) + interval '1day');

这种方法的优势在于它只能在date字段上使用索引,如果您已经拥有它,那就很好。