数仓 SQL 函数对照

首页 / 字符串

SUBSTR 截取子串

SUBSTR 从指定位置截取字符串。各引擎都从 1 开始计数,负数表示从末尾倒数;起始位置写 0 时,多数引擎返回空字符串。Hologres 的 SUBSTR 需要 orafce 扩展,标准写法是 SUBSTRING。

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

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 SUBSTR(str, start_position[, length]) 从 1 开始计数,负数从末尾倒数。start_position 为 0 时返回空字符串;Hive 兼容模式和 BigQuery 兼容模式下按 1 处理。length 为 0 或负数时返回空字符串。 官方文档
Hologres 需改写 SUBSTRING(str FROM start FOR len) SUBSTR 是 Oracle 兼容函数,需要先加载 orafce 扩展。PostgreSQL 标准写法是 SUBSTRING。 官方文档
StarRocks 支持 substr(str, pos[, len]) substr 和 substring 是同一个函数。从 1 开始计数,负数从末尾倒数,pos 为 0 或超出长度时返回空字符串。 官方文档
Doris 支持 SUBSTRING(str, pos[, len]) 别名 SUBSTR。从 1 开始计数,负数从末尾倒数,pos 为 0 或超出长度时返回空字符串,任一参数为 NULL 时返回 NULL。 官方文档
Hive 支持 substr(str, start[, len]) substr('foobar', 4) 返回 bar。手册没有说明负数和 0 的处理。 官方文档
Spark SQL 支持 substr(str, pos[, len]) Spark 1.5.0 起提供,与 substring 相同。负数从末尾倒数:substr('Spark SQL', -3) 返回 SQL。 官方文档
Flink SQL 支持 SUBSTR(string, integer1[, integer2]) 也可以写 SUBSTRING。省略长度时截取到末尾。 官方文档

迁移注意事项

示例

取日期字符串中的年月

MaxCompute
SELECT SUBSTR(biz_date, 1, 7) FROM orders;
Hologres
SELECT SUBSTRING(biz_date FROM 1 FOR 7) FROM orders;
StarRocks
SELECT substr(biz_date, 1, 7) FROM orders;

同类函数

最后核对日期: