跳到主要内容

KEYVALUE

描述

该函数用于从键值对字符串中提取特定键对应的值。

注意事项

  • 不允许指定 delimiter_1delimiter_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: 表示包含多个键值对的字符串。支持类型:VARCHARTINYTEXTTEXTLONGTEXTNULL 等,不支持 JSON

  • delimiter_1, delimiter_2,:可选项,表示分隔符。具体如下:

    • delimiter_1:表示键值对分隔符,默认为 ;。支持类型:VARCHARNULL
    • delimiter_2:表示键值分隔符,默认为 :。支持类型:VARCHARNULL
  • key: 表示要查找的键(key)。支持类型:VARCHARNULL。即将 str 按照 delimiter_1delimiter_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)