Postgresql 如何使用默认时间tmp定义今天日期
我正在使用postgressql,我希望获取currentdate的数据,我希望根据日期筛选数据 在数据库中,我的plandate字段被定义为带时区的时间戳,因此它的显示格式如下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”是没有行的。我如何管理今天的日期详
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');