Поддерживает ли Postgres R-подобную статистику в типе столбцов jsonb?

Поддерживает ли PostgreSQL оператор MySQL 'RLIKE' / Regexp в виде столбцов jsonb?

например, нужен запрос, который извлекает из следующей таблицы все идентификаторы, которые содержат значение "большой":

| data                                    |  
| "id" :"bigData" , "content" : "aaa...." |  
| "id" : "biggerData, "content" : "bbb..."|  
| "id": "smallData", "content: "ddd......"|  



Select * from myTable where data Rlike ...

Это применимо?

2 ответа

Если столбец содержит допустимые объекты json, вы можете использовать оператор ->>;; и просто LIKE или же ILIKE оператор:

with my_table(data) as (
values
    ('{"id": "bigData" , "content": "aaa...."}'::jsonb),
    ('{"id": "biggerData", "content": "bbb..."}'),
    ('{"id": "smallData", "content": "ddd......"}')
)

select *
from my_table
where data->>'id' like '%big%';

                   data                    
-------------------------------------------
 {"id": "bigData", "content": "aaa...."}
 {"id": "biggerData", "content": "bbb..."}
(2 rows)    

В более сложных случаях вы также можете использовать оператор сопоставления с регулярным выражением ~, например:

select *
from my_table
where data->>'id' ~ 'big.*Data';

Спасибо, Клин, я использовал формат:

select * from my_table 
where data ->> 'id' ~* 'big'; 

-> Это будет искать все идентификаторы, которые его значение содержит подстроку "большой"

Другие вопросы по тегам