【问题标题】:Convert a json date column in google bigdata sql query在google bigdata sql查询中转换json日期列
【发布时间】:2021-05-08 14:35:20
【问题描述】:

我正在尝试获取表中的一列,该列的值是一个包含日期的 json 字符串。

SELECT DISTINCT
  contact_date, 
  JSON_value(contact_date, '$.value') as date1
FROM arcus.encounter   

代码产生这个错误

错误:对于参数类型:DATETIME、STRING 的函数 JSON_VALUE 没有匹配的签名。支持的签名:JSON_VALUE(STRING, [STRING]) at [3:3]

SELECT DISTINCT
  contact_date, 
FROM arcus.encounter    
LIMIT 5
{
  "value": "2014-11-05T00:00:00"
}

【问题讨论】:

  • 根据报错信息,该列已经是日期了。
  • 您正在处理的表的架构是什么? (更准确地说是 arcus.encounter contact_date)。 JSON_VALUE 函数对 JSON 的 STRING 表示进行操作,您的列似乎不符合该要求。
  • @Cylldby contact_date 列包含 JSON 字符串而不是字符串。问题是如何将该 JSON 字符串中的值转换为日期格式。说尝试过的方法不起作用,忽略了一点,即如果它确实起作用,那么向 SO 发布问题就没有意义了。
  • @HarlanNelson 实际上我的问题不是很准确。我的观点是我们需要更多关于如何构建表格的信息。当我尝试使用 SELECT JSON_VALUE("{\"value\": \"2014-11-05T00:00:00\"}", '$.value') AS 结果重现问题时......我的没有错误边..

标签: sql json google-bigquery


【解决方案1】:

JSON_VALUE 函数的两个参数都应该是字符串。即,JSON_VALUE(字符串,[字符串])。 从错误消息中可以清楚地看出,contact_date 的类型是 DATETIME。这就是函数返回错误的原因。为了使用 JSON_VALUE,contact_type 的类型应该是字符串。

更多说明请参考以下链接,

JSON_VALUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2021-12-29
    • 2012-04-01
    相关资源
    最近更新 更多