我想在json对象中搜索特定值,但不能使用json_textcontains.

表:

|   ID   |    NAME   |                    JSONCOLUMN               | ...
|   1    |    test   |{"key1" : "24", "key2": "35", "key3" : "57"} | ...
|   2    |    test2  |{"key1" : "67", "key2": "78", "key3" : "31"} | ...
|   3    |    test3  |{"key1" : "12", "key2": "35", "key3" : "99"} | ...

现在我有了一个搜索词,例如"35",并希望jsonColumn中包含该词的所有行都是value(我不想搜索键).

因此,在上面的第1行和第3行的示例中.

我可以通过以下质疑来实现这一点:

select * from T t where JSON_TEXTCONTAINS(t.jsoncolumn, '$', '35')

但我不能用json_textcontains美元.所以我正在寻找一个等价的查询.

编辑: 阐明了我想从查询中得到什么.

推荐答案

您可以使用LIKE条件或INSTR()函数进行匹配.

然而,仅在t.jsoncolumn上使用它就会在完整的json中找到匹配,也就是在关键部分中.要只搜索值,可以首先使用JSON_QUERY提取它们.

两者都有

SELECT * 
  FROM t 
 WHERE JSON_QUERY(jsoncolumn, '$.*' WITH WRAPPER) LIKE '%35%'

SELECT * 
  FROM t
 WHERE INSTR(JSON_QUERY(t.jsoncolumn, '$.*' WITH WRAPPER), '35') > 0;

应该会产生与您的JSON_TEXTCONTAINS()个示例相同的结果.

请参见this db<>fiddle.

Java相关问答推荐

如何将一些命令写入Chrome控制台,然后使用Java将输出存储在selenium中

泽西岛:退回到不注射的客户"

如何在Java中对自定义协议进行主机名验证?

在FML中删除关键帧动画

如何将kotlin代码转换为java

无法找到符号错误—Java—封装

参数值[...]与预期类型java.util.Date不匹配

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

由于 list 中的权限错误,Android未生成

OpenGL ES 3.0-纹理黑色

基于接口的投影、原生查询和枚举

使用存储在字符串变量中的路径目录打开.pdf文件

有效的公式或值列表必须少于或等于255个字符

从Spring6中的JPMS模块读取类时出现问题

在JDK Flight Recorder中只记录单个线程

如何在Java中使用正则表达式拆分字符串

如何对存储为字符串的大数字数组进行排序?

获取所有可以处理Invent.ACTION_MEDIA_BUTTON Android 13 API33的Android包

Kotlin-仅替换字符串中最后一个给定的字符串

如何显示新布局