json_extract_path_text 转换为 int 错误

Posted

技术标签:

【中文标题】json_extract_path_text 转换为 int 错误【英文标题】:json_extract_path_text cast to int error 【发布时间】:2014-09-02 22:19:16 【问题描述】:

我正在尝试从存储在亚马逊红移文本字段中的 JSON blob 中提取整数。我的查询看起来(大致)如下:

select json_extract_path_text(json_column, 'integer_field')::int from data;

但是,我遇到了一个奇怪的错误:

ERROR: Invalid digit, Value '1', Pos 0, Type: Integer

为什么“1”是无效的数字类型?这里发生了什么?

【问题讨论】:

请注意,我将其转换为 int 是因为 json_extract_path_text 返回一个字符串。 【参考方案1】:

事实证明(感谢this *** question)当JSON blob 中没有'integer_field' 时,返回的值是空字符串''。由于某种原因,强制转换为整数函数不支持这一点。奇怪的是,一个非空字符串 ' ' 就可以作为输入,所以下面的解决方法解决了这个问题:

nullif(json_extract_path_text(json_column, 'integer_field'), ' ')::int

现在我们知道了。

【讨论】:

以上是关于json_extract_path_text 转换为 int 错误的主要内容,如果未能解决你的问题,请参考以下文章

基准 Amazon Redshift JSON_EXTRACT_PATH_TEXT

在 Redshift 中使用 json_extract_path_text 时如何跳过错误?

json_extract_path_text('[]', 'some_key') 在有效的 json 字符串上抛出错误

是否可以查询列表元素?

Redshift Postgresql - 如何解析嵌套的 JSON

修复 SQL 中的无效 json