2014-09-02 160 views
1

我试图从存储在亚马逊红移文本字段中的JSON blob中提取一个整数。我的查询看起来(大约),如:json_extract_path_text强制转换为int错误

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

不过,我得到一个奇怪的错误:

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

为什么是 '1',一个非法数字型?这里发生了什么? (原文:

+0

请注意,我将它转换为int,因为'json_extract_path_text'返回一个字符串。 – DaveA 2014-09-02 22:20:32

回答

4

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

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

现在我们知道了。