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 字符串上抛出错误