SQL 方言通

首页 / 字符串

SUBSTRING_INDEX 按分隔符截取

SUBSTRING_INDEX(str, delim, count) 返回第 count 个分隔符之前的部分,count 为负数时从右边数。MaxCompute、StarRocks、Doris、Hive 和 Spark 同名可用,count 为 0 时结果不同;Hologres 和 Flink 没有这个函数。

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

各引擎写法

引擎支持写法说明依据
MaxCompute支持SUBSTRING_INDEX(str, separator, count)MaxCompute 2.0 扩展函数。count 为正从左边截取,为负从右边截取。任一参数为 NULL 时返回 NULL。官方文档
Hologres不支持—字符串函数中没有 SUBSTRING_INDEX。只取某一段时可以用 SPLIT_PART。官方文档
StarRocks支持substring_index(str, delimiter, count)3.2 起提供。count 为 0 时返回 NULL,超过分隔符个数时返回整个字符串。官方文档
Doris支持SUBSTRING_INDEX(content, delimiter, field)field 为 0 时返回空字符串。分隔符不存在时返回原字符串,分隔符为空字符串时返回空字符串。官方文档
Hive支持substring_index(string A, string delim, int count)Hive 1.3.0 起提供。官方文档
Spark SQL支持substring_index(str, delim, count)Spark 1.5.0 起提供,按区分大小写的方式匹配分隔符。官方文档
Flink SQL不支持—内置函数中没有 SUBSTRING_INDEX。只取某一段时可以用 SPLIT_INDEX,下标从 0 开始。官方文档

迁移注意事项

示例

取邮箱的用户名部分

MaxCompute
SELECT SUBSTRING_INDEX(email, '@', 1) AS username FROM users;
Hologres
SELECT SPLIT_PART(email, '@', 1) AS username FROM users;
StarRocks
SELECT substring_index(email, '@', 1) AS username FROM users;
Doris
SELECT SUBSTRING_INDEX(email, '@', 1) AS username FROM users;
Hive
SELECT substring_index(email, '@', 1) AS username FROM users;
Spark SQL
SELECT substring_index(email, '@', 1) AS username FROM users;
Flink SQL
SELECT SPLIT_INDEX(email, '@', 0) AS username FROM users;

同类函数

最后核对日期: