次のようなMySQLテーブルがあるとしましょう。
このテーブルは、
CREATE TABLE `MyTable` (
`JsonData` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`ExtractedData` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL
);
INSERT INTO MyTable (JsonData, ExtractedData)
VALUES ('[10, 20, 30]', NULL);
INSERT INTO MyTable (JsonData, ExtractedData)
VALUES ('["a", "b"]', NULL);
INSERT INTO MyTable (JsonData, ExtractedData)
VALUES ('["q", "w", "e", "r"]', NULL);
jsonデータの最後から2番目の要素をにコピーするにはどうすればよいExtractedData
ですか?
つまり、次のようにテーブルを更新したいということです。
私はそれselect @len := JSON_LENGTH(JsonData) from MyTable;
がすべての長さを取得できることを発見しましたJsonData
。
またUPDATE MyTable SET ExtractedData = JSON_EXTRACT(JsonData, '$[0]');
、の最初の要素をにコピーできることもわかりましJsonData
たExtractedData
。
最後から2番目の要素をコピーできるように2つのコマンドを組み合わせるにはどうすればよいExtracedData
ですか?
UPDATE MyTable SET ExtractedData = JSON_EXTRACT(JsonData, '$[@len-2]');
動作しません。
@len
ここに表があります。各更新行に自動マップすることはできません。
あなたは長さをインライン化する必要があります、例えば
UPDATE MyTable SET ExtractedData = JSON_EXTRACT(JsonData, CONCAT('$[',JSON_LENGTH(JsonData)-1,']'));
https://www.db-fiddle.com/f/6PC2CaBxwDdfpruECqAjGR/1でフィドルを確認してください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加