MySQL JSON仅在值> gt时提取值。 1

时间:2017-10-16 08:21:00

标签: mysql

我有下表:

+-------------+----------------+
| id          |  server        |
+-------------+----------------+
| 1           |  ["1", "15"]   |
+-------------+----------------+

我需要得到的只有1的值,所以在上面的例子中我只需从输出中得到15

我尝试使用它:

SELECT
JSON_EXTRACT(server, "$[*]") as server
FROM streams
WHERE JSON_EXTRACT(server, "$[*]") != JSON_QUOTE('1')
AND id=1;

但我总是得到[“1”,“15”],需要得到[“15”]。

2 个答案:

答案 0 :(得分:1)

不幸的是,您不能使用MySQL的JSON_EXTRACTJSON_SEARCH函数来执行此操作,因为它们分别执行提取和精确匹配(而不是比较)。所以,你有两个选择:

  • 规范化表格并将server值放入新列(推荐)
  • 获取所有值并在服务层
  • 中执行过滤

答案 1 :(得分:0)

我补充说:

SELECT CASE WHEN 
JSON_UNQUOTE(JSON_SEARCH(server, 'all', 1)) IS NULL THEN 
    JSON_REMOVE(server, '$."1"')
ELSE 
    JSON_REMOVE(server, JSON_UNQUOTE(JSON_SEARCH(server, 'one', 1)))
END AS server
FROM streams WHERE id=2 AND server NOT LIKE '%[]%';

现在它可以工作,但如果[“1”]在json列中只有1我得到[] ...添加NOT LIKE '%[]%'但它打印出总是[] ...我需要添加以获取没有从mysql找到结果?