SPLIT_PART

更新时间:
复制 MD 格式

SPLIT_PART函数用于根据指定的分隔符delimiter对一个字符串source_string进行切分,并返回由起始序号start_position和可选的结束序号end_position所指定的子字符串。

命令格式

STRING SPLIT_PART(STRING <source_string>, STRING <delimiter>, BIGINT <start_position>[, BIGINT <end_position>])

-- 标准示例。
-- 返回a。
SELECT SPLIT_PART('a,b,c,d', ',', 1);

参数说明

  • source_string:必填。STRING类型。待拆分的原始字符串。如果是BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算。

  • delimiter:必填。STRING类型常量。拆分用的分隔符,可以是一个字符,也可以是一个字符串。

  • start_position:必填。BIGINT类型常量,必须大于0。表示返回段的开始编号(从1开始)。

  • end_position:可选。BIGINT类型常量,大于等于start_position。表示返回段的截止编号,可省略,缺省时表示和start_position取值相等,返回start_position指定的段。

返回值说明

返回STRING类型。切分后的子字符串。返回规则如下:

  • 索引超范围

    • 若start_position大于拆分后片段数量,返回空串。

    • 若end_position大于片段数量,返回从start_position开始直到字符串末尾的所有片段。

  • 分隔符不存在

    • 若delimiter在source_string中不存在且start_position=1,返回整个source_string。

    • 若同时source_string为空串,返回空串。

  • 分隔符为空串

    • 直接返回原字符串source_string。

  • 类型错误

    • source_string非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME类型时,报错。

    • delimiter非STRING类型常量时,报错。

    • start_position或end_position非BIGINT类型常量时,报错。

  • 返回NULL值

    • 任一参数为NULL时,返回NULL。

使用示例

基本示例

  • 示例1:依照分隔符,拆分字符串a,b,c,d,返回指定部分的子串。

    -- 返回a。
    SELECT SPLIT_PART('a,b,c,d', ',', 1);
    -- 返回a,b。
    SELECT SPLIT_PART('a,b,c,d', ',', 1, 2);
  • 示例2:start_position的值大于切分后实际的分段数。

    -- 返回空串。
    SELECT SPLIT_PART('a,b,c,d', ',', 10);
  • 示例3:delimiter不存在于source_string中。

    -- 返回a,b,c,d。
    SELECT SPLIT_PART('a,b,c,d', ':', 1);
    -- 返回空串。
    SELECT SPLIT_PART('a,b,c,d', ':', 2);
  • 示例4:end_position的值大于切分后实际的分段数。

    -- 返回b,c,d。
    SELECT SPLIT_PART('a,b,c,d', ',', 2, 6);
  • 示例5:从邮箱地址中提取用户名。

    -- 返回alicexxx。
    SELECT SPLIT_PART('alicexxx@example.com', '@', 1) AS username;
  • 示例6:使用多字符分隔符提取字段。

    -- 返回banana。
    SELECT SPLIT_PART('apple||banana||cherry', '||', 2) AS second_item;
  • 示例7:任一参数为 NULL 时,返回 NULL。

    -- 均返回NULL。
    SELECT 
      SPLIT_PART(NULL, ',', 1) AS null_string,
      SPLIT_PART('a,b,c', NULL, 1) AS null_delimiter,
      SPLIT_PART('a,b,c', ',', NULL) AS null_part_num;

相关函数

SPLIT_PART函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数。