【问题标题】:Parse a column that is an json object解析作为 json 对象的列
【发布时间】:2020-02-25 01:56:07
【问题描述】:

我想查询这个作为 JSON 对象的列。

|  x  |     y     |                        z                  |
----------------------------------------------------------------
|  1  | first      | {"first_name":["Pat","Amy T."],"last_name":["Liman","Pedano"],"updated_at":["1989-11-30T19:00:00.000-05:00","2018-10-11T12:45:44.674-04:00"]}    |
|  2  | second    | {"first_name":["Elli","Ala"],"last_name":["Sheppard","Mcgrial"],"updated_at":["2019-03-16T11:15:25.714-04:00","2019-05-21T11:29:00.684-04:00"]}   |

其中 z 是一个 json 对象。

我试过了

SELECT x, y, t1.first_name, t1.last_name, t1.updated_at
FROM versions_table v
    LATERAL VIEW json_tuple(v.z, 'first_name', 'last_name', 'updated_at') t1 
    as `first_name`, `last_name`, `updated_at`
where first_name is not null;

但我得到一个 json 数组。更改日期格式的最佳方法是什么

输出是这样的2019-01-03。

谢谢!

【问题讨论】:

  • 你用的是postgresql还是mysql?它们是不同的数据库
  • 不清楚列类型是日期时间格式还是字符串,因为它确实有 T,但是:尝试 select cast(updated_at as date) FROM ....
  • 我在databricks中做这个查询,也就是Spark SQL

标签: mysql sql postgresql apache-spark databricks


【解决方案1】:

您的日期字符串采用“组合时间戳”格式。据我了解,您只是想将该字符串转换为日期类型。

PostgreSQL

以下示例有效,并将您的字符串转换为您想要的日期:

SELECT '2018-10-11T12:45:44.674-04:00'::date

您可以在this tutorial 中了解更多有关投射的信息。 :: 是转换运算符。

另一种选择是使用to_date function or similar:

SELECT to_date('2018-10-11T12:45:44.674-04:00', 'YYYY-MM-DD');

MySQL

在 MySQL 中,您可以使用 DATE function

SELECT DATE('2018-10-11T12:45:44.674-04:00')

【讨论】:

  • @MarianaLungu 是不知道如何从JSON对象中选择字符串的问题吗?
  • 我有这个专栏updated_at,我需要将格式从`` ["2019-01-05T17:28:32.506-05:00","2019-06-15T13: 22:02.625-04:00"]```。到 ``` 2019-01-05, 2019-06-15 ``` 但是因为它是一个 json 数组,我不知道我怎么能做到这一点!
  • 也许 postgres 函数 json_array_elements 或 json_array_elements_text 和类似的会帮助你?此函数将 JSON 数组扩展为结果集。 Here's the docs on that。这有帮助吗?
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
相关资源
最近更新 更多