【问题标题】:Oracle: Equivalent sql statement to json_textcontains functionOracle:等效于 json_textcontains 函数的 sql 语句
【发布时间】:2022-08-16 21:45:51
【问题描述】:

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

例如,我们在列中有这个 json_object:

{
    \"key1\" : \"test\",
    \"key2\" : \"test2\",
    \"key3\" : \"35\",
    \"key4\" : \"3.4\",
    \"key5\" : \"35\"
}

现在我有一个搜索词,例如35 并且想要获取所有包含该术语的键/值对。

-> \"key3\" : \"35\"
-> \"key5\" : \"35\"

什么是 sql 语句,相当于这个 json_textcontains 语句:

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

编辑: 也许澄清一下,我不想要 json 输出,我只想要一个表的所有行,其中我的搜索词在存储在所述表的列中的 json 字符串中找到。

  • 但是...json_textcontains 不会产生任何输出,它只是一个条件。它不会从 JSON 数据中提取任何信息。
  • 是的,问题是,是否还有另一个 sql 条件,可以在 json 数据中搜索。上面的 sql 语句给了我想要的行,但我不能在我的查询中使用 json_textcontains。因此,在 where 子句中等效替换了 json_textcontains。

标签: java sql json oracle


【解决方案1】:

您可以简单地使用LIKE 条件或INSTR() 函数。

两个都

SELECT * FROM t WHERE t.jsoncolumn LIKE '%35%';

SELECT * FROM t WHERE INSTR(LOWER(t.jsoncolumn), '35') > 0;

将产生与您的 JSON_TEXTCONTAINS() 示例相同的结果。

但是,正如 cmets 中所指出的,这只会让您获得在 jsoncolumn 某处出现 35 的行。它不会提取这些密钥。

this db<>fiddle

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2011-09-04
    • 2011-05-09
    • 2011-05-01
    相关资源
    最近更新 更多