【问题标题】:Redshift can't cast text to boolean from json fieldRedshift 无法将文本从 json 字段转换为布尔值
【发布时间】:2023-01-03 21:25:07
【问题描述】:

在 Redshift 数据库中,给定一个包含以下 json 的字段:

{"0":true,"1":true,"2":true,"3":true,"4":true,"5":true,"6":true}

虽然我可以使用 json_extract_path_text(my_field, '0') 提取 true,但当我尝试提取元素并将其转换为布尔值时,如下所示:

SELECT 
    json_extract_path_text(my_field, '0')::boolean
FROM my_table

然后我收到以下错误:

无法将类型文本转换为布尔值

我不明白,因为以下工作没有任何问题:

SELECT 'true'::boolean, 'false'::boolean;

【问题讨论】:

  • SELECT json_extract_path_text(my_field, '0') FROM my_table 为该行返回什么? true
  • 是的。我不知道如何仔细检查它的类型,但根据错误,它看起来像一个文本
  • 你可以转换为文本然后转换为布尔值吗?只是一个想法。我对正在发生的事情的猜测是该值有时未定义并且“缺失”值未映射到布尔值。您可能需要使用 decode() 函数将这些“未定义”值修改为 null。
  • 我有一个重现问题的最小示例:select json_extract_path_text('{"0":true}', '0')::boolean;。如果我之前转换为text,我会得到一个稍微不同的错误:cannot cast type character varying to boolean

标签: amazon-redshift


【解决方案1】:

这篇文章似乎回答了这个问题: https://stackoverflow.com/a/45799072

SELECT BOOLIN(TEXTOUT(json_extract_path_text('{"0":true}', '0')));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多