仅比较postgres中两个时间戳的时间

时间:2013-12-10 17:27:12

标签: sql postgresql rails-activerecord rails-postgresql

在PostgreSQL中,我需要一种方法来确定当前时间是否在具有opens_at和closes_at时间戳的特定模型的操作时间内。什么是Postgres有效的做法。

对于Sqlite3,我有:

                        (opens_at > closes_at AND
                        (TIME(opens_at) > :now OR :now < TIME(closes_at)))
                        OR
                        (closes_at > opens_at AND
                        (TIME(opens_at) < :now AND TIME(closes_at) > :now))

我忘了提到这是通过ActiveRecord,所以:now实际上等于当前的UTC时间。

1 个答案:

答案 0 :(得分:2)

最简单的做法可能是将timestamp转换为time并使用localtime

opens_at::time > localtime or localtime < closes_at::time
...

Rails将在数据库中包含UTC中的所有内容(包括数据库连接),因此您不必担心时区问题。