列名“备注”- json类型
列的一个单元中的数据以如下方式写入:
[
{"text":"bbb","userID":"U001","time":16704,"showInReport":true},
{"text":"bb","userID":"U001","time":167047,"showInReport":true}
]
interval note column containing data
如何查找包含“bb”的关键字文本的值可以使用哪个postgersql查询来查找结果
我使用了下面的查询,它工作,但如果有人给值作为用户ID或文本,然后它显示错误的结果
我使用的是Postgres 10.20版本
select distinct(workflowid)
from cyto_records r
join cyto_record_results rr on (r.recordid = rr.recordid)
where rr.interval_note::text LIKE '%aaa%';
3条答案
按热度按时间9gm1akwq1#
尝试使用JSON_EXTRACT
参考https://dev.mysql.com/doc/refman/8.0/en/json.html#json-paths
zysjyyx42#
对于Postgres版本11及更早版本,您需要迭代数组元素:
如果您使用的是Postgres 12或更高版本,则可以使用JSON路径表达式:
这里假设
interval_note
是用推荐的类型jsonb
定义的。如果不是,你需要转换它:interval_note::jsonb
与您的问题无关,但是:
distinct
运算符不是一个函数。用括号将后面的列括起来是无用的,不会改变distinct (a),b
与distinct a,(b)
或distinct a,b
相同实际上,它是SELECT关键字的一个“选项”:
SELECT ALL
与SELECT DISTINCT
-类似于UNION ALL
与UNION DISTINCT
.t40tm48m3#
我建议首先使用横向连接进行扁平化,然后执行“普通”选择。
Postgres版本前12:
使用
jsonb_path_query
的Postgres版本12以上: