跳到主要内容

SPLIT_BY_STRING

描述

SPLIT_BY_STRING 函数将输入字符串按照指定的分隔符字符串拆分成字符串数组。该函数支持多字符分隔符,与某些数据库的类似函数在空字符串处理上可能存在差异。

语法

SPLIT_BY_STRING(<str>, <separator>)

参数

参数说明
<str>需要分割的源字符串。类型:VARCHAR
<separator>用于分割的分隔符字符串。类型:VARCHAR

返回值

返回 ARRAY 类型,包含按分隔符拆分后的字符串数组。

分割规则:

  • 按照 separator 在 str 中出现的位置进行分割
  • 连续的分隔符会产生空字符串元素
  • 字符串开头或结尾的分隔符会产生空字符串元素

特殊情况:

  • 如果任意参数为 NULL,返回 NULL
  • 如果 str 为空字符串,返回包含一个空字符串的数组 [""]
  • 如果 separator 为空字符串,str 会按字符进行拆分(每个字符成为数组的一个元素)
  • 如果 separator 在 str 中不存在,返回包含原字符串的数组
  • 如果 str 只包含分隔符,根据分隔符数量返回相应数量的空字符串

示例

  1. 基本字符串分割
SELECT SPLIT_BY_STRING('hello', 'l');
+-------------------------------+
| SPLIT_BY_STRING('hello', 'l') |
+-------------------------------+
| ["he", "", "o"] |
+-------------------------------+
  1. 空分隔符(按字符分割)
SELECT SPLIT_BY_STRING('hello', '');
+------------------------------+
| SPLIT_BY_STRING('hello', '') |
+------------------------------+
| ["h", "e", "l", "l", "o"] |
+------------------------------+
  1. 多字符分隔符
SELECT SPLIT_BY_STRING('apple::banana::cherry', '::');
+------------------------------------------------+
| SPLIT_BY_STRING('apple::banana::cherry', '::') |
+------------------------------------------------+
| ["apple", "banana", "cherry"] |
+------------------------------------------------+
  1. NULL 值处理
SELECT SPLIT_BY_STRING(NULL, ','), SPLIT_BY_STRING('hello', NULL);
+-----------------------------+----------------------------------+
| SPLIT_BY_STRING(NULL, ',') | SPLIT_BY_STRING('hello', NULL) |
+-----------------------------+----------------------------------+
| NULL | NULL |
+-----------------------------+----------------------------------+
  1. 空字符串处理
SELECT SPLIT_BY_STRING('', ','), SPLIT_BY_STRING('hello', 'xyz');
+---------------------------+----------------------------------+
| SPLIT_BY_STRING('', ',') | SPLIT_BY_STRING('hello', 'xyz') |
+---------------------------+----------------------------------+
| [""] | ["hello"] |
+---------------------------+----------------------------------+
  1. 连续分隔符
SELECT SPLIT_BY_STRING('a,,b,c', ',');
+-------------------------------+
| SPLIT_BY_STRING('a,,b,c', ',') |
+-------------------------------+
| ["a", "", "b", "c"] |
+-------------------------------+
  1. 开头和结尾的分隔符
SELECT SPLIT_BY_STRING(',a,b,', ',');
+------------------------------+
| SPLIT_BY_STRING(',a,b,', ',') |
+------------------------------+
| ["", "a", "b", ""] |
+------------------------------+
  1. 只包含分隔符
SELECT SPLIT_BY_STRING('|||', '|');
+----------------------------+
| SPLIT_BY_STRING('|||', '|') |
+----------------------------+
| ["", "", "", ""] |
+----------------------------+
  1. UTF-8 字符分割
SELECT SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ');
+--------------------------------------+
| SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ') |
+--------------------------------------+
| ["ṭṛì", "ḍḍumai", "ṭṛì"] |
+--------------------------------------+
  1. 不存在的分隔符
SELECT SPLIT_BY_STRING('hello world', 'xyz');
+--------------------------------------+
| SPLIT_BY_STRING('hello world', 'xyz') |
+--------------------------------------+
| ["hello world"] |
+--------------------------------------+