SQL 方言通

首页 / 字符串

INSTR 查找子串位置

INSTR 返回子串在字符串中第一次出现的位置,下标从 1 开始,找不到时返回 0。多数引擎同名可用,Hologres 要改用 STRPOS。只有 MaxCompute 支持起始位置和第 N 次出现这两个参数,LOCATE 和 POSITION 的参数顺序与 INSTR 相反。

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

各引擎写法

引擎支持写法说明依据
MaxCompute支持INSTR(str1, str2[, start_position[, nth_appearance]])找不到时返回 0,str2 为空串时返回 1,任一参数为 NULL 时返回 NULL。start_position 为负数时从末尾倒数,nth_appearance 必须大于 0。官方文档
Hologres需改写STRPOS(str, substr)INSTR 是 Oracle 兼容函数,需要先安装 orafce 扩展才能用,支持起始位置和第 N 次出现。不装扩展时用 STRPOS。官方文档
StarRocks支持instr(str, substr)按字符计数,下标从 1 开始,找不到时返回 0。需要指定起始位置时用 locate(substr, str, pos)。官方文档
Doris支持INSTR(str, substr)区分大小写,按 UTF-8 字符计算位置。找不到时返回 0,substr 为空串时返回 1,任一参数为 NULL 时返回 NULL。官方文档
Hive支持instr(str, substr)下标从 1 开始,找不到时返回 0,任一参数为 NULL 时返回 NULL。需要起始位置时用 locate(substr, str, pos)。官方文档
Spark SQL支持instr(str, substr)Spark 1.5.0 起提供,下标从 1 开始。需要起始位置时用 locate(substr, str, pos)。官方文档
Flink SQL支持INSTR(string1, string2)任一参数为 NULL 时返回 NULL。需要起始位置时用 LOCATE(string1, string2, integer),找不到时返回 0。官方文档

迁移注意事项

示例

判断备注中是否包含“退款”

MaxCompute
SELECT order_id FROM orders WHERE INSTR(remark, '退款') > 0;
Hologres
SELECT order_id FROM orders WHERE STRPOS(remark, '退款') > 0;
StarRocks
SELECT order_id FROM orders WHERE instr(remark, '退款') > 0;
Doris
SELECT order_id FROM orders WHERE INSTR(remark, '退款') > 0;
Hive
SELECT order_id FROM orders WHERE instr(remark, '退款') > 0;
Spark SQL
SELECT order_id FROM orders WHERE instr(remark, '退款') > 0;
Flink SQL
SELECT order_id FROM orders WHERE INSTR(remark, '退款') > 0;

同类函数

最后核对日期: