好的,阿杰,我给你整理一份 Oracle 中 SUBSTR() 函数详解及应用,涵盖语法、参数、示例和注意事项。
1. SUBSTR() 函数概述
- 功能:从字符串中提取指定位置和长度的子串。
- 类型:字符串函数(String Function)
- 返回值:截取的子串
2. 语法
SUBSTR(string, start_position [, length])
参数说明
| 参数 | 说明 |
|---|---|
string | 要截取的原始字符串 |
start_position | 截取的起始位置(1 表示第一个字符)支持负数,表示从字符串末尾倒数开始 |
length | 可选,截取的字符数如果省略,表示从起始位置截取到字符串末尾 |
3. 使用规则
- start_position > 0
- 从字符串开头第
start_position个字符开始截取 - 示例:
SELECT SUBSTR('Hello World', 7, 5) FROM dual;输出:World - 从字符串开头第
- start_position < 0
- 从字符串末尾开始倒数计算位置
- 示例:
SELECT SUBSTR('Hello World', -5, 3) FROM dual;输出:Wor- 解释:倒数第 5 个字符开始,截取 3 个字符
- length 省略
- 截取从 start_position 到末尾的所有字符
SELECT SUBSTR('Hello World', 7) FROM dual;输出:World - length 超过剩余字符长度
- 不会报错,直接截取到字符串末尾
SELECT SUBSTR('Hello', 3, 10) FROM dual;输出:llo
4. 常见应用示例
(1)提取固定位置字符
SELECT SUBSTR('20250925', 1, 4) AS year FROM dual;
-- 输出: 2025
(2)提取文件扩展名
SELECT SUBSTR('report.xlsx', INSTR('report.xlsx', '.') + 1) AS ext FROM dual;
-- 输出: xlsx
说明:配合
INSTR()定位字符位置
(3)从右向左截取字符串
SELECT SUBSTR('HelloWorld', -5) AS right_part FROM dual;
-- 输出: World
(4)截取电话号码中间部分
SELECT SUBSTR('13812345678', 4, 4) AS mid_num FROM dual;
-- 输出: 1234
5. 注意事项
- 字符位置从 1 开始,不是从 0。
- start_position 超出字符串范围:返回空字符串。
- length 为负数:在 Oracle 中会报错,不支持负长度。
- 多字节字符:对中文或 UTF-8 字符,需要注意字符长度与字节长度的区别,可结合
SUBSTRB()使用。
6. 扩展用法
SUBSTRB(string, start_position [, length])- 按 字节截取,而非字符
- 在处理中文或多字节编码时使用
- 与
INSTR()配合:
SELECT SUBSTR('abc_def_ghi', INSTR('abc_def_ghi','_')+1, 3) AS mid
FROM dual;
-- 输出: def
- 可结合
UPPER()、LOWER()、TRIM()做字符串清洗
发表回复