SQL 方言通

首页 / 字符串

SPLIT_PART 按分隔符取第 N 段

SPLIT_PART 按分隔符切分字符串,返回第 N 段,下标从 1 开始。多数引擎同名可用,但下标越界时有的返回空字符串,有的返回 NULL;Hive 要用 split 加数组下标改写,Flink 的 SPLIT_INDEX 下标从 0 开始。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持SPLIT_PART(str, delimiter, start[, end])下标从 1 开始,必须是大于 0 的常量。传入 end 时返回 start 到 end 段,并保留中间的分隔符。下标越界返回空字符串,分隔符为空字符串时返回原串,任一参数为 NULL 时返回 NULL。官方文档
Hologres支持SPLIT_PART(str, delimiter, num)下标从 1 开始。num 超出分段数量时返回 NULL。官方文档
StarRocks支持split_part(content, delimiter, field)正数从开头数,负数从末尾数,-1 表示最后一段。下标越界时,官方示例返回空字符串。官方文档
Doris支持SPLIT_PART(str, separator, part_index)下标从 1 开始。part_index 为 0 或越界时返回 NULL,任一参数为 NULL 时也返回 NULL。官方文档
Hive需改写split(str, pat)[n - 1]内置函数中没有 SPLIT_PART。split 的第二个参数是正则表达式,返回数组,数组下标从 0 开始。官方文档
Spark SQL支持split_part(str, delimiter, partNum)Spark 3.3.0 起提供。下标从 1 开始,负数从末尾数。越界返回空字符串,partNum 为 0 时报错,分隔符为空字符串时不切分。官方文档
Flink SQL需改写SPLIT_INDEX(str, delimiter, n - 1)下标从 0 开始。下标为负数或任一参数为 NULL 时返回 NULL。官方文档

迁移注意事项

示例

从 a,b,c 中取第 2 段

MaxCompute
SELECT SPLIT_PART(tags, ',', 2) FROM items;
Hologres
SELECT SPLIT_PART(tags, ',', 2) FROM items;
StarRocks
SELECT split_part(tags, ',', 2) FROM items;
Doris
SELECT SPLIT_PART(tags, ',', 2) FROM items;
Hive
SELECT split(tags, ',')[1] FROM items;
Spark SQL
SELECT split_part(tags, ',', 2) FROM items;
Flink SQL
SELECT SPLIT_INDEX(tags, ',', 1) FROM items;

同类函数

最后核对日期: