KEYVALUE
描述
该函数用于从键值对字符串中提取特定键对应的值。
注意事项
-
不允许指定
delimiter_1和delimiter_2为相同字符串。 -
若
delimiter_1分割得到的字符串中包含多个delimiter_2,则使用第一个delimiter_2作为分割符得到对应的 Key 和 Value。例如,执行SELECT KEYVALUE('name:Li:xiang;age:12', ';', ':', 'name');返回结果如下:+----------------------------------------------------+
| KEYVALUE('name:Li:xiang;age:12', ';', ':', 'name') |
+----------------------------------------------------+
| Li:xiang |
+----------------------------------------------------+
1 row in set
语法声明
KEYVALUE(str, [delimiter_1, delimiter_2,] key)
参数解释
-
str: 表示包含多个键值对的字符串。支持类型:VARCHAR、TINYTEXT、TEXT、LONGTEXT、NULL等,不支持JSON。 -
delimiter_1, delimiter_2,:可选项,表示分隔符。具体如下:delimiter_1:表示键值对分隔符,默认为;。支持类型:VARCHAR、NULL。delimiter_2:表示键值分隔符,默认为:。支持类型:VARCHAR、NULL。
-
key: 表示要查找的键(key)。支持类型:VARCHAR、NULL。即将str按照delimiter_1和delimiter_2拆分后,返回key值对应的value。
返回类型
- 当表达式任意参数为
NULL时,返回结果为NULL。 - 如果未找到对应的键,函数将返回
NULL。 - 如果有多个键值对匹配,返回第一个匹配上的
key对应的value。
示例
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;
返回结果如下:
+----------------+------------------+------------------+----------+------+------+---------------+
| 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 (0.001 sec)