lpad函数用于字符串左填充,语法为lpad(str, len, pad),将str左侧用pad补足至len长度;str原长≥len时返回原串,pad须为字符串且推荐单字符如'0',数字字段需先cast转字符串,不同数据库兼容性差异大。

LPAD函数补零的基本用法
LPAD 是 SQL 中用于左填充的字符串函数,常见于 MySQL、Oracle、PostgreSQL(需启用 pg_trgm 或使用 lpad() 内置函数),但 SQLite 和 SQL Server 不原生支持。它接收三个参数:LPAD(str, len, pad) —— 把 str 左侧用 pad 字符补足到长度 len。
- 如果
str原长 ≥len,直接返回原字符串(不会截断) -
pad只能是字符串,且会被重复拼接,所以用'0'最安全 - 数字字段需先转成字符串,否则在多数数据库里会报错或隐式转换失败
比如给编号 id 补成 6 位:
SELECT LPAD(CAST(id AS CHAR), 6, '0') FROM orders;
不同数据库对 LPAD 的兼容性差异
不是所有数据库都叫 LPAD,也不是所有都默认可用:
- MySQL:直接支持
LPAD(),CAST(id AS CHAR)或CONVERT(id, CHAR)都行 - PostgreSQL:有
lpad()(小写),但要求输入为text类型,lpad(id::text, 6, '0')才安全 - Oracle:支持
LPAD(),TO_CHAR(id, 'FM000000')是更常见的替代方案(尤其处理序列号时) - SQL Server:没有
LPAD,得用RIGHT('000000' + CAST(id AS VARCHAR(6)), 6)或FORMAT(id, 'D6')(SQL Server 2012+) - SQLite:不支持
LPAD,只能靠substr('000000' || id, -6)模拟(注意负数索引含义)
跨库迁移时,别硬套 MySQL 写法,先查目标库文档确认函数名和类型要求。
补零时容易忽略的坑
补零看着简单,实际常因数据类型和边界情况翻车:
-
id是NULL时,LPAD(NULL, 6, '0')返回NULL,不是'000000';需要加COALESCE(id, 0)或显式判断 - 补位长度设太小(比如
len=3但原始值是'1234'),结果仍是'1234',达不到“强制截断+补零”效果 - 在 ORDER BY 中用
LPAD排序,虽然视觉上整齐,但本质还是字符串排序,'9'>'10';真要数值顺序,别依赖补零后的字符串 - 使用
LPAD生成主键或业务编码时,务必确认该字段在应用层是否被当作字符串处理,避免后续 JSON 序列化或 API 传参时被自动转成数字丢零
补零这事,核心不是函数怎么写,而是你清楚自己到底要“格式化显示”还是“构造固定长度键值”。前者用 LPAD 没问题,后者得同步检查上下游系统对前导零的容忍度。










