跳到主要内容

INSTR

描述

INSTR 函数用于返回子字符串在主字符串中第一次出现的位置,位置从 1 开始计数。这是一个常用的字符串搜索函数,支持精确匹配,对大小写敏感。该函数在文本处理、数据清洗和字符串分析中广泛使用。

语法

INSTR(<str>, <substr>)

参数

参数说明
<str>主字符串,在其中搜索子字符串。类型:VARCHAR
<substr>子字符串,要查找的目标字符串。类型:VARCHAR

返回值

返回 INT 类型,表示子字符串在主字符串中第一次出现的位置。

查找规则:

  • 返回从 1 开始的位置索引(不是从 0 开始)
  • 如果子字符串不存在,返回 0
  • 查找是大小写敏感的
  • 支持 UTF-8 多字节字符的正确位置计算
  • 空字符串的特殊处理

特殊情况:

  • 如果任一参数为 NULL,返回 NULL
  • 如果子字符串为空字符串,返回 1(空字符串在任何位置都"存在")
  • 如果主字符串为空但子字符串不为空,返回 0
  • 支持查找包含特殊字符和符号的子字符串

示例

  1. 基本字符查找
SELECT INSTR('abc', 'b'), INSTR('abc', 'd');
+-------------------+-------------------+
| INSTR('abc', 'b') | INSTR('abc', 'd') |
+-------------------+-------------------+
| 2 | 0 |
+-------------------+-------------------+
  1. 子字符串查找
SELECT INSTR('hello world', 'world'), INSTR('hello world', 'WORLD');
+------------------------------+------------------------------+
| INSTR('hello world', 'world') | INSTR('hello world', 'WORLD') |
+------------------------------+------------------------------+
| 7 | 0 |
+------------------------------+------------------------------+
  1. NULL 值处理
SELECT INSTR(NULL, 'test'), INSTR('test', NULL);
+---------------------+---------------------+
| INSTR(NULL, 'test') | INSTR('test', NULL) |
+---------------------+---------------------+
| NULL | NULL |
+---------------------+---------------------+
  1. 空字符串处理
SELECT INSTR('hello', ''), INSTR('', 'world');
+--------------------+---------------------+
| INSTR('hello', '') | INSTR('', 'world') |
+--------------------+---------------------+
| 1 | 0 |
+--------------------+---------------------+
  1. 重复字符查找(返回第一次出现)
SELECT INSTR('abcabc', 'abc'), INSTR('banana', 'a');
+------------------------+----------------------+
| INSTR('abcabc', 'abc') | INSTR('banana', 'a') |
+------------------------+----------------------+
| 1 | 2 |
+------------------------+----------------------+
  1. 特殊字符和符号
SELECT INSTR('user@example.com', '@'), INSTR('price: $99.99', '$');
+--------------------------------+-----------------------------+
| INSTR('user@example.com', '@') | INSTR('price: $99.99', '$') |
+--------------------------------+-----------------------------+
| 5 | 8 |
+--------------------------------+-----------------------------+
  1. UTF-8 多字节字符
SELECT INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai'), INSTR('ṭṛì ḍḍumai hello', 'hello');
+------------------------------------+-----------------------------------+
| INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai') | INSTR('ṭṛì ḍḍumai hello', 'hello') |
+------------------------------------+-----------------------------------+
| 5 | 13 |
+------------------------------------+-----------------------------------+
  1. 数字字符串
SELECT INSTR('123456789', '456'), INSTR('123-456-789', '-');
+---------------------------+-----------------------------+
| INSTR('123456789', '456') | INSTR('123-456-789', '-') |
+---------------------------+-----------------------------+
| 4 | 4 |
+---------------------------+-----------------------------+
  1. 长子字符串查找
SELECT INSTR('The quick brown fox', 'quick'), INSTR('The quick brown fox', 'slow');
+------------------------------------+-----------------------------------+
| INSTR('The quick brown fox', 'quick') | INSTR('The quick brown fox', 'slow') |
+------------------------------------+-----------------------------------+
| 5 | 0 |
+------------------------------------+-----------------------------------+
  1. 路径和URL中的查找
SELECT INSTR('/home/user/file.txt', '/'), INSTR('https://www.example.com', '://');
+-----------------------------------+----------------------------------------+
| INSTR('/home/user/file.txt', '/') | INSTR('https://www.example.com', '://') |
+-----------------------------------+----------------------------------------+
| 1 | 6 |
+-----------------------------------+----------------------------------------+