我有一个名为“属性”的列,其中包含一个 JSON blob。该 blob 在一行中可以有单个或多个键:值。
以下是 3 行简化的示例数据:
{"68c4":["yes"], "c8ew":["0","1"], "p6i4":["London","Frankfurt","Tokyo"]}
{"472h":["USD"], "c8ew":["-1","9"], "p6i4":["New York"]}
{"472h":["EUR","JPY"]}
Run Code Online (Sandbox Code Playgroud)
密钥是 UUID,我需要用人类可读的组件替换它们
我知道我可以写这样的东西:
SELECT JSON_MODIFY(attributes, '$."p6i4"', 'City') AS modified
Run Code Online (Sandbox Code Playgroud)
但这改变了价值。我的问题是我需要更改密钥。有谁知道如何做到这一点?
您可以使用旧键的值/片段插入新键并删除旧键:值。
此代码将使用“p6i4”中的值添加新的“City”键:
SELECT JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4'))
Run Code Online (Sandbox Code Playgroud)
请注意,您需要使用 JSON_QUERY 因为您有数组值。如果将旧密钥复制到另一个密钥后在旧密钥中设置 NULL 值,JSON_MODIFY 将删除它:
SELECT JSON_MODIFY(
JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4')),
'$.p6i4', NULL)
Run Code Online (Sandbox Code Playgroud)