json类型的Postgres无效输入语法详细信息:令牌“%”无效

时间:2019-02-11 19:00:05

标签: postgresql sql-like jsonb

我正在尝试检查某些文本是否包含文本和Postgres数组中的值的串联,例如:

SELECT true from jsonb_array_elements('["a", "b"]'::jsonb) as ids 
WHERE 'bar/foo/item/b' LIKE '%item/' || ids->>'id' || '%'

我遇到以下错误:

ERROR: invalid input syntax for type json Detail: Token "%" is invalid. Position: 95 Where: JSON data, line 1: %...

如何使用数组的值,将它们与文本连接起来并检查LIKE表达式?

我尝试了几种明确添加::jsonb之类的演员的想法,但到目前为止还算不上什么。

2 个答案:

答案 0 :(得分:1)

最后成功了,这是结果:

SELECT true from jsonb_array_elements_text('["a", "c"]'::jsonb) as ids 
WHERE 'bar/foo/item/b' LIKE '%item/' || ids.value || '%'

主要更改是使用jsonb_array_elements_text代替jsonb_array_elementsids.value代替ids->>'id'

答案 1 :(得分:1)

问题是||->>运算符具有相同的precedence并保持关联,因此表达式被解释为

(('%item/' || ids) ->>'id') || '%'

您必须添加括号:

'%item/' || (ids->>'id') || '%'