首页/数据/SQL 速查/LPAD / RPAD 补位与截断
函数速查60 条

LPAD / RPAD 补位与截断

按指定长度左右补位(常用于编号前补零),长度小于原串时会从另一端截断;补位串可以多于 1 个字符。

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

LPAD / RPAD 是什么

LPAD 与 RPAD 把字符串补齐到指定长度:LPAD 从左侧补,RPAD 从右侧补,MySQL、PostgreSQL、Oracle 都提供。它们同时是截断工具:目标长度小于原串长度时,LPAD 从左侧截断、RPAD 从右侧截断,这一点常被忽略导致数据被悄悄切掉。补位结果始终是字符串,不能当作数值参与运算,也不适合直接用于数值列的比较与排序。

基本信息

适用平台MySQL 8.0 / PostgreSQL / Oracle / SQL Server(SQL Server 无同名函数,需用 RIGHT/LEFT + REPLICATE 组合)
语法LPAD(字符串, 目标长度, 填充串)、RPAD(字符串, 目标长度, 填充串)
超长行为目标长度小于原串长度时截断:LPAD 保留右侧字符,RPAD 保留左侧字符
填充串不足部分会用填充串循环重复补齐
NULL 行为任一参数为 NULL 时结果为 NULL

典型使用场景

  • 生成固定长度编码:订单号、工号不足位左补 0
  • 文本报表对齐:把变长字段补到统一宽度
  • 定长截断:从右侧截断长文本用于列表展示
  • 脱敏展示:保留尾部几位,前面用固定字符填充
  • 拼接定宽数据文件:给下游系统的固定宽度格式准备字段

补齐示例

补齐示例
SELECT LPAD('42', 6, '0')            AS padded_code,   # 000042,左补零
       RPAD('AB', 5, '*')            AS padded_right,  # AB***
       LPAD('13800000000', 18, ' ')  AS aligned,       # 右对齐显示
       RPAD('13800000000', 11, '*')  AS shown,         # 长度已够,原样返回
       LPAD(NULL, 5, '0')            AS null_demo;     # NULL

SELECT LPAD('ABCDEF', 10, 'xy') AS repeat_demo;       # xyxyABCDEF:填充串循环使用

截断行为要小心

截断行为要小心
# 目标长度小于原串时会截断:LPAD 从左截,RPAD 从右截
SELECT LPAD('ABCDEF', 4, 'x') AS l_trunc,   # CDEF:保留右侧
       RPAD('ABCDEF', 4, 'x') AS r_trunc;   # ABCD:保留左侧

-- 只想要固定长度展示时,先确认源数据长度上限
SELECT order_no, RPAD(order_no, 20, ' ') AS fixed_width
FROM orders
WHERE CHAR_LENGTH(order_no) > 20;           # 先把超长的挑出来核对

行为速查

表达式结果说明
LPAD('42', 6, '0')000042左侧补零
RPAD('AB', 5, '*')AB***右侧补星号
LPAD('ABCDEF', 4, 'x')CDEF超长时从左侧截断
RPAD('ABCDEF', 4, 'x')ABCD超长时从右侧截断
LPAD(NULL, 5, '0')NULL任一参数为 NULL 即返回 NULL
补位后仍是字符串:工号、商户号这类以 0 开头的编号应始终以字符串存储和查询;数值运算场景保留数值类型,只在展示层补位,避免两种形态混用。
在 WHERE 里对列套 LPAD 会让该列的索引失效;需要按补位后的形态查询时,应在写入时就存成规范形态,或建立对应的生成列与索引。

易错点

  • 用 LPAD 补齐后仍按数值条件查询,字符串与数字混用触发隐式转换,索引失效
  • 忘记目标长度小于原串会被截断,业务长度可变的编号被悄悄切掉一段
  • 对可能为 NULL 的列做补位,结果整列变 NULL 且不报错
  • 在 WHERE 中对列套 LPAD 再过滤,索引失效,且与存储形态不一致

数据来源与参考

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