【问题标题】:casting or converting string value into date in postgres/jsonb在 postgres/jsonb 中将字符串值转换或转换为日期
【发布时间】:2016-10-05 07:43:08
【问题描述】:

我正在尝试编写一个需要使用函数MAX() 的查询。数据存储在jsonb 列中,例如: {"created_at": "2012-08-03T02:32:44", "company": "apple"}

我想在“created_at”键上运行MAX() 函数。

SELECT MAX(data -> 'created_at) FROM ... 不起作用。

SELECT MAX(cast(data -> 'created_at) as DATE) FROM ... 也不行。

【问题讨论】:

  • -> 只返回json。您是否尝试过返回text->>
  • 是的,我刚刚尝试了一下,它确实有效。反正谢谢
  • 好吧,显然它不起作用。我没有收到错误,但结果是错误的。 min() 和 max() 总是返回相同的消息
  • 当投射到date 时,您正在丢掉时间部分。 max(cat(data ->>'created_at' as timestamp)) 应该可以工作:sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/9025
  • 单步执行。确保你正在提取你想要的东西。然后确保你正确地投射它。确保您将日期、时间戳等传递给 max()

标签: postgresql jsonb


【解决方案1】:

我随机尝试了另一次尝试,它成功了

data ->> 'created_at' AS DATE 有效,因为->> 返回文本

【讨论】:

  • 喜欢这个...你救了我。干杯!
【解决方案2】:

要将其转换为 Date 数据类型,请执行以下操作:

to_date(table.date_column->>'date', 'YYYY-MM-DD') AS date_namespace

Timestamp 数据类型

to_timestamp(table.date_column->>'date', 'YYYY-MM-DDTHH:MI:SS.MS') AS timestamp_namespace

这将允许您像这样使用 BETWEEN 日期语法:

WHERE table.date_column ->> 'date' BETWEEN '2021-10-01' AND '2021-10-30'

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 2022-01-11
    • 2018-02-21
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多