如何使用 JSON 值作为日期

How to use a JSON value as a Date

我有一个使用 Slick 与 PostgreSQL 连接的应用程序。

由于模型使用包含日期的 JSON 列,我想弄清楚如何按该日期进行过滤。

这是一个类似的数据库定义:

class EventsDAO(tag: Tag) extends Table[Event](tag, "events") {
  def info = column[JsValue]("info")
  ...
}

case class Event(info: JsValue)

这是我想翻译成 Slick 的查询:

SELECT *
FROM events
WHERE Date(f.home_description ->> 'creationDate') < Date('2015-09-28')

为什么不直接使用 Postgres 原生日期类型?

如果是无法更改的现有数据库,您可以

  1. 在你的应用层做过滤器(这应该适用于小数据集)

  2. 使用 slick plain-sql

  3. 中的普通 sql 查询
  4. 可以写一个映射函数把JSON转换成Date类型,勾选User defined feature

看看 slick-pg 如果你还没有,它提供了对 JSON 和日期类型的支持。