我想做的,但我想这是不可能的:
我在一个列中有JSON数据,用于保存翻译。例如,列描述值:{"de": "hi wie gehts?", "en": "hi, how are you?"}
现在我只想更新"en"属性。我知道用JSON_REPLACE可以做到这一点,但它有一种奇怪的语法,我必须首先生成SQL代码才能实现。
我正在寻找的是这样一种可能性,即只发送{"en": "hi, how are you!?"},然后它应该保留"de"属性,并且只更新"en"属性。
有一个JSON_MERGE函数,但这不是我想要的,但除此之外,这是我喜欢使用的语法。
有没有一些嵌套的mysql函数的变通方法?
发布于 2017-08-25 19:04:03
有了可用的12.16 JSON Functions,要实现所需的功能并不容易。如果普通的JSON总是只有一个键,您可以尝试如下所示:
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.19 |
+-----------+
1 row in set (0.00 sec)
mysql> SET
-> @`json` := '{"de": "hi wie gehts?", "en": "hi, how are you?"}',
-> @`plain_json` := '{"en": "hi, how are you!?"}';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT
-> JSON_MERGE(
-> JSON_REMOVE(
-> @`json`,
-> CONCAT('$.',
-> JSON_EXTRACT(
-> JSON_KEYS(@`plain_json`),
-> '$[0]'
-> )
-> )
-> ),
-> @`plain_json`
-> ) `UPDATE`;
+----------------------------------------------------+
| UPDATE |
+----------------------------------------------------+
| {"de": "hi wie gehts?", "en": "hi, how are you!?"} |
+----------------------------------------------------+
1 row in set (0.00 sec)如果您的普通JSON中有多个键,则需要更复杂的东西来实现您的目标。
参见db-fiddle。
https://stackoverflow.com/questions/45863825
复制相似问题