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