【发布时间】:2019-06-14 17:05:56
【问题描述】:
我在搜索时尝试查询数据库中的用户。但是我收到一个特定错误,即“运营商不存在:没有时区的时间戳 ~~* 未知”
在我的数据库中,data_of_birth 的记录以下面的格式保存。现在确定我错过了什么。代码如下
field == "dob"
selected_date = Date.strptime(query, '%Y-%m-%d')
items = Patient.joins(role: :user).where('users.date_of_birth ILIKE :search', search: "%#{selected_date}%")
出生日期在数据库中的保存方式
date_of_birth: "1997-03-29 00:00:00"
【问题讨论】:
-
ILIKE在时间戳上没有多大意义。你可能只想要=? -
您的
date_of_birth列不应该是date而不是timestamp吗?然后你可以做一个简单的相等测试。 -
它有一个日期时间。我的专栏在数据库 't.datetime "date_of_birth", null: false' 中查找此内容
-
应该只是日期而不是日期时间吗? @muistooshort
-
是的,
t.date会更合适。迁移中的t.datetime在 PostgreSQL 中以timestamp结尾,对于术语更改感到抱歉。但是你仍然不能在 PostgreSQL 中使用 LIKE,你可以使用=。 SQLite 将允许您使用 LIKE,因为它没有真正的日期或时间类型,它使用 ISO-8601 格式将日期和时间存储在文本值中;我不知道这部分是否适用。
标签: sql ruby-on-rails ruby postgresql