簡體   English   中英

MySQL JSON僅在值> 1時提取值

[英]MySQL JSON extract values only if there value > 1

我有下表:

+-------------+----------------+
| 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”]。

不幸的是,您無法使用MySQL的JSON_EXTRACTJSON_SEARCH函數執行此操作,因為它們分別執行提取和精確匹配(而不是比較)。 因此,您有兩個選擇:

  • 標准化表並將server值放入新列中(推薦)
  • 獲取所有值並在服務層中執行過濾

我添加了這個:

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找不到結果?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM