Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何使用默认时间tmp定义今天日期_Postgresql_Date_Time - Fatal编程技术网

Postgresql 如何使用默认时间tmp定义今天日期

Postgresql 如何使用默认时间tmp定义今天日期,postgresql,date,time,Postgresql,Date,Time,我正在使用postgressql,我希望获取currentdate的数据,我希望根据日期筛选数据 在数据库中,我的plandate字段被定义为带时区的时间戳,因此它的显示格式如下2013-09-01 03:22:01.438348+05:30我的查询如下 select ttodoid ,date,details from ttodo where date=currentdate(): 但是currentdate函数根据此结果只提供日期“2013-10-06”是没有行的。我如何管理今天的日期详

我正在使用postgressql,我希望获取currentdate的数据,我希望根据日期筛选数据 在数据库中,我的plandate字段被定义为带时区的时间戳,因此它的显示格式如下
2013-09-01 03:22:01.438348+05:30
我的查询如下

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

但是currentdate函数根据此结果只提供日期“2013-10-06”是没有行的。我如何管理今天的日期详细信息更新:

一种方法

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

选择*
来自ttodo
其中日期>=日期(“天”,当前时间戳)
日期
这里是演示

从ttodo中选择*,其中(ttodo.todoplandate::date=当前日期)或
(ttodo.todoplandate::date我认为更简单的方法是将您的字段转换为
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)));
另一种方法是检查间隔,而不是投射场,类似于什么,但间隔正确:

SELECT ttodoid ,date,details FROM ttodo
WHERE date >= date_trunc('day', current_timestamp)
      AND date < (date_trunc('day', current_timestamp) + interval '1day');
从ttodo中选择ttodoid、日期、详细信息
其中日期>=日期(“天”,当前时间戳)
日期<(日期(“天”,当前时间戳)+间隔“1天”);

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

这(有点)错误。使用这种方法,您可以获得明天的记录,如果且仅当其时间部分为
'00:00:00.000'
(确切地说是午夜)。为避免出现这种情况,您应该在
日期
字段中选择
日期
,或者使用
=
=
@MatheusOl绝对有效的一点。感谢您的输入。Answer和sqlfiddle已更新。太晚了,正在匆忙回答。不要担心会发生这种情况……但是如果您想更精确(实际上更精确),您应该使用
-间隔“1微秒”
(而不是
毫秒
),那么我就没有什么可抱怨的了,=P。为什么要进行第二次验证?
SELECT ttodoid ,date,details FROM ttodo
WHERE date >= date_trunc('day', current_timestamp)
      AND date < (date_trunc('day', current_timestamp) + interval '1day');