我正在使用这个查询来查找一个表中的数据,其中profile
是一个JSONB
列,它可以正常工作,但只有当名称完全匹配时才能起作用。
SELECT * FROM "users" WHERE "profile" @> '{"name":"Super User"}'
是否有更多的灵活性,例如大小写不敏感、通配符等?
类似于"Super%"
或"超级用户"
这样的内容。
我正在使用这个查询来查找一个表中的数据,其中profile
是一个JSONB
列,它可以正常工作,但只有当名称完全匹配时才能起作用。
SELECT * FROM "users" WHERE "profile" @> '{"name":"Super User"}'
是否有更多的灵活性,例如大小写不敏感、通配符等?
类似于"Super%"
或"超级用户"
这样的内容。
我找到了解决我的问题的方法:
SELECT * FROM "users" WHERE (profile #>> '{name}') ILIKE 'super %'
我不确定这个表现得足够好,但它能用。
可能最好给它加上一个索引。
profile #>> '{fullname, firstname,...}'
。在这里,您的对象将类似于:{fullname: {firstname: 'abc'}}
。 - Shyam Kansagra