首页/数据/SQL 速查/SUBSTRING 截取子串
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条
函数速查60 条
变更与事务52 条性能与执行计划72 条

SUBSTRING 截取子串

按位置截取子串:MySQL 支持负数位置从尾部数;PostgreSQL 用 substring(str from start for len),位置从 1 开始。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
SELECT SUBSTRING('abcdef', 2, 3);   -- 'bcd'
SELECT SUBSTRING('abcdef', -3);     -- 'def'(从尾部数 3 个)
SELECT SUBSTRING('abcdef', -3, 2);  -- 'de'

PostgreSQL

PostgreSQL
SELECT substring('abcdef' from 2 for 3);  -- 'bcd'
SELECT substr('abcdef', 2, 3);            -- 'bcd'
SELECT right('abcdef', 3);                -- 'def'
位置基准两库都从 1 开始计数
省略长度截取到字符串末尾
负位置MySQL 从尾部数;PostgreSQL 用 right()/reverse() 组合表达

易错点

  • 起始位置写成 0 会得到空串或意外结果,SQL 位置从 1 起(和其它语言不同)
  • 第三个参数是“长度”不是“结束位置”:SUBSTRING('abcdef', 2, 3) 得 'bcd' 而不是 'bcde'

数据来源与参考

  • MySQL 8.0 Reference Manual · String Functions
  • PostgreSQL Documentation · String Functions and Operators
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌