Purpose
This function is used to extract the value corresponding to a specific key from a key-value string.
Note
For OceanBase Database V4.3.5, this function is supported starting from V4.3.5 BP1.
Limitations and considerations
You cannot specify
delimiter_1anddelimiter_2as the same string.If the string obtained by splitting with
delimiter_1contains multipledelimiter_2strings, the firstdelimiter_2is used as the delimiter to obtain the corresponding key and value. For example, executingSELECT KEYVALUE('name:Li:xiang;age:12', ';', ':', 'name');returns the following result:+----------------------------------------------------+ | KEYVALUE('name:Li:xiang;age:12', ';', ':', 'name') | +----------------------------------------------------+ | Li:xiang | +----------------------------------------------------+ 1 row in set
Syntax
KEYVALUE(str, [delimiter_1, delimiter_2,] key)
Parameters
str: The string containing multiple key-value pairs. Supported types:VARCHAR,TINYTEXT,TEXT,LONGTEXT, andNULL. Not supported:JSON.delimiter_1, delimiter_2: Optional. The delimiters. Details:delimiter_1: The delimiter for key-value pairs. Default value:;. Supported types:VARCHARandNULL.delimiter_2: The delimiter for keys and values. Default value::. Supported types:VARCHARandNULL.
key: The key to be searched for (key). Supported types:VARCHARandNULL. After splitting the stringstrusingdelimiter_1anddelimiter_2, the function returns the value corresponding to the specifiedkey.
Return type
- If any parameter in the expression is
NULL, the result isNULL. - If the corresponding key is not found, the function returns
NULL. - If multiple key-value pairs match, the function returns the value corresponding to the first matching
key.
Examples
SELECT
KEYVALUE(NULL, ',', '=', 'b') AS key_value_null,
KEYVALUE('a=1,b=2,c=3', NULL, '=', 'b') AS delimiter_1_null,
KEYVALUE('a=1,b=2,c=3', ',', NULL, 'b') AS delimiter_2_null,
KEYVALUE('a=1,b=2,c=3', ',', '=', NULL) AS key_null,
KEYVALUE('a=1,b=2,c=3', ',', '=', 'b') AS b,
KEYVALUE('a=1,b=2,c=3,b=4', ',', '=', 'b') AS bs,
KEYVALUE('a:1;b:2;c:3', 'b') split_default;
The return result is as follows:
+----------------+------------------+------------------+----------+------+------+---------------+
| key_value_null | delimiter_1_null | delimiter_2_null | key_null | b | bs | split_default |
+----------------+------------------+------------------+----------+------+------+---------------+
| NULL | NULL | NULL | NULL | 2 | 2 | 2 |
+----------------+------------------+------------------+----------+------+------+---------------+
1 row in set