Purpose
This function is used to extract the value corresponding to a specific key from a string of key-value pairs.
Note
This function is supported starting from OceanBase Database V4.3.5 BP1.
Considerations
You cannot specify
delimiter_1anddelimiter_2as the same string.If the string obtained by splitting with
delimiter_1contains multipledelimiter_2strings, the firstdelimiter_2string is used as the separator 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.JSONis not supported.delimiter_1, delimiter_2: Optional. The separators. Details are as follows:delimiter_1: The separator for key-value pairs. The default value is;. Supported types:VARCHARandNULL.delimiter_2: The separator for keys and values. The default value is:. Supported types:VARCHARandNULL.
key: The key to be searched for (key). Supported types:VARCHARandNULL. Thestrstring is split usingdelimiter_1anddelimiter_2, and thevaluecorresponding to thekeyis returned.
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
valuecorresponding to the first matchingkeyis returned.
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
