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

问题描述 投票:1回答:2

我想检查是否一些文本包含文本和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铸造一些想法,但至今没有运气。

postgresql sql-like jsonb
2个回答
1
投票

的问题是,||->>操作符具有相同precedence和是左关联,所以表达式被解释为

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

你必须添加括号:

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

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'

© www.soinside.com 2019 - 2024. All rights reserved.