OceanBaseデータベースは、CAST関数を使用して他のデータ型とJSONデータ型との相互変換をサポートしています。
JSONデータ型の変換ルールは以下の表のとおりです。
| その他のデータ型 | CAST(other_type AS JSON) | CAST(JSON AS other_type) |
|---|---|---|
| JSON | 変更なし | 変更なし |
| utf8文字型 (utf8mb4、utf8、asciiを含む) | 文字はJSON型値に変換され、その妥当性が検証されます。 | シリアライズしてutf8mb4文字列にします。 |
| その他の文字セット型 | 最初にutf8mb4文字エンコーディングに変換され、その後utf8文字型の説明に従って変換されます。 | 最初にutf8mb4エンコードの文字列にシリアライズされ、その後対応する文字セットの文字列に変換されます。 |
| NULL | 空のJSON型値を返します。 | 該当なし |
| その他の型 | 単一のスカラー値のみが、個別の値を持つJSON型値に変換されます。 | JSON型値が単一のスカラー値のみを含み、かつターゲット型と一致する場合は、対応する型に変換されます。そうでない場合はNULLを返し、警告が表示されます。 |
説明
other_type は、JSON以外の他のデータ型を指定します。
以下にいくつかの変換例を示します。
obclient> SELECT CAST("123" AS JSON);
+---------------------+
| CAST("123" AS JSON) |
+---------------------+
| 123 |
+---------------------+
1 row in set
obclient> SELECT CAST(null AS JSON);
+--------------------+
| CAST(null AS JSON) |
+--------------------+
| NULL |
+--------------------+
1 row in set
CREATE TABLE tj1 (c1 JSON,c2 VARCHAR(20));
INSERT INTO tj1 VALUES ('{"id": 17, "color": "red"}','apple'),('{"id": 18, "color": "yellow"}', 'banana'),('{"id": 16, "color": "orange"}','orange');
obclient> SELECT * FROM tj1 ORDER BY CAST(JSON_EXTRACT(c1, '$.id') AS UNSIGNED);
+-------------------------------+--------+
| c1 | c2 |
+-------------------------------+--------+
| {"id": 16, "color": "orange"} | orange |
| {"id": 17, "color": "red"} | apple |
| {"id": 18, "color": "yellow"} | banana |
+-------------------------------+--------+
3 rows in set