sql - 只比较postgres中两个时间戳的时间

标签 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 时间。

最佳答案

可能最简单的做法是将时间戳转换为time。 s 并使用 localtime :

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

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

关于sql - 只比较postgres中两个时间戳的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20501202/

相关文章:

ruby-on-rails - Ruby on Rails - 查找值等于 NaN 的位置

sql - 计算两个日期之间不包括星期日的天数

SQL 更新;根据两列(总计)填充 1 列

java - 组织.postgresql.util.PSQLException : No value specified for parameter 1

sql - 每组值的自定义序列号/自动增量

ruby-on-rails - Ruby - 忽略 protected 属性

mysql - 如何在mysql中以 "all or nothing "模式执行N次插入

php - 从 sql count() 获取单独的答案到 php

ruby-on-rails - 如何重置我的 heroku 数据库?

mysql - Rails/Devise/ActiveRecord 不接受 unicode 字符