0

我正在使用 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' 是没有行我如何管理它以获取今天的日期详细信息

4

3 回答 3

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演示

于 2013-10-07T07:22:40.390 回答
0

select * from ttodo where (ttodo.todoplandate::date = current_date) 或 (ttodo.todoplandate::date < current_date

于 2013-10-07T10:29:30.230 回答
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 提出的类似,但间隔正确:

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

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

于 2013-10-07T12:28:46.687 回答