好好学习
天天向上

lpad是什么

lpad,全称是 left pad,就是往左边填充的意思。

说白了,它就是一个用来处理字符串的函数。你给它一个字符串,告诉它你想要的最终长度,再告诉它用什么字符来填充,它就会在原始字符串的左边,用你指定的字符,把字符串补到你想要的那个长度。

这个函数在很多地方都有,最常见的是在数据库里,比如 MySQL、Oracle、PostgreSQL 里面都有它。一些编程语言里也有类似的功能。

我们先看它的基本用法,一般是这个结构:
lpad(原始字符串, 最终长度, 用来填充的字符串)

这里有三个东西:
1. 原始字符串:就是你要处理的那个文本。比如 ‘abc’ 或者 ‘123’。
2. 最终长度:你希望处理完之后,字符串的总长度变成多少。比如 10。
3. 用来填充的字符串:当原始字符串不够长的时候,用什么字符来补。最常用的是 ‘0’ 或者空格 ‘ ‘。

举个最直接的例子。假设我们有个数字 123,我们希望它变成一个 6 位数的编号,不足的位数在前面用 0 补齐。

就可以这么写:
lpad('123', 6, '0')

结果就是:
'000123'

你看,’123′ 本身有 3 位,我们想要 6 位,还差 3 位,于是函数就在左边补了 3 个 ‘0’。就这么简单。

但是,为什么我们需要这么一个看起来不起眼的功能?

我刚开始做数据处理的时候,就遇到过一个很实际的问题。公司需要生成一批发票号,格式要求是 INV- 开头,后面跟着 8 位数字,比如 INV-00001234。数据库里只存了自增的数字,比如 1, 2, 3… 1234。我要怎么把这些数字变成符合要求的发票号?

当时我的第一反应是写一个复杂的程序,判断数字的位数,然后根据位数决定在前面加几个 0。比如数字是 1234,它有 4 位,目标是 8 位,所以前面要加 4 个 0。如果数字是 56,它有 2 位,目标是 8 位,就要加 6 个 0。这样做很麻烦,而且容易出错。

后来同事告诉我,用 lpad 一行 SQL 就能搞定。

比如我们要处理数字 1234,步骤是这样的:
第一步,先把数字 1234 补全成 8 位的字符串 '00001234'
lpad('1234', 8, '0')

第二步,再在前面加上 INV- 这个前缀。
concat('INV-', lpad('1234', 8, '0'))

就这样,直接得到了 'INV-00001234'

这个方法的好处是,你根本不用关心原来的数字是多少位。不管是 1 还是 12345lpad 函数会自动计算需要补几个 ‘0’。这让代码变得特别简洁,而且可靠。

这就是 lpad 最核心的用途:保证数据格式的统一性

统一的格式有什么好处?
首先是排序。如果你直接按字符串排序 '1', '10', '2',结果会是 '1', '10', '2',这显然不是我们想要的数字顺序。但是如果你把它们都变成固定长度,比如 '01', '10', '02',再排序,结果就是 '01', '02', '10',这就对了。在处理文件编号、员工工号这类数据时,这点特别重要。

其次是可读性和对齐。有时候我们需要生成一些报表,希望数据能对齐,看起来整洁。比如我们想让所有的名字都靠右对齐,占 20 个字符的宽度。

假设我们有几个名字:’张三’, ‘李四光’, ‘王五’。
我们可以用 lpad 配合空格来填充:
lpad('张三', 20, ' ')
lpad('李四光', 20, ' ')
lpad('王五', 20, ' ')

这样在等宽字体下,它们就会显示成:
张三
李四光
王五
所有名字的右边都对齐了,报表看起来就舒服多了。

当然,lpad 也有几个需要注意的地方,不然可能会出问题。

第一个坑:如果原始字符串比你想要的最终长度还要长,会发生什么?

比如,你执行这个:
lpad('1234567', 5, '0')

原始字符串 ‘1234567’ 有 7 位,但你指定最终长度是 5。这时候,大部分数据库(比如 MySQL 和 Oracle)会把原始字符串从左边开始截断,只留下 5 位。

结果就是:
'12345'

它并不会报错,而是直接给你一个截断后的结果。这是一个很危险的行为,因为你可能在不知不觉中丢失了数据。所以,在使用 lpad 的时候,你最好能确定你的最终长度参数足够大,能容纳所有可能的数据。

第二个坑:填充的字符串可以是多个字符。

我们通常都用单个字符比如 ‘0’ 或者 ‘ ‘ 来填充,但其实 lpad 允许你用多个字符。

比如:
lpad('A', 10, 'xy')

结果会是:
'xyxyxyxyxA'

它会重复使用 ‘xy’ 来填充,直到达到总长度。如果最后一次填充不下完整的 ‘xy’,它只会用部分。比如:
lpad('A', 10, 'abc')

结果是:
'abcabcabcA'
这里它重复了 3 次 ‘abc’,总共填充了 9 个字符。

这个特性不常用,但了解一下没坏处,免得在看别人代码的时候感到困惑。

第三个点:和 lpad 对应的,还有一个 rpad

rpad 就是 right pad,往右边填充。用法和 lpad 一模一样,只是填充的方向反了。

rpad('123', 6, '0')

结果是:
'123000'

它在字符串的右边补了 3 个 ‘0’。这在需要左对齐文本的时候很有用。

总的来说,lpadrpad 是数据库和数据处理中非常基础但又极其有用的工具。它们不复杂,但能帮你解决很多关于数据格式化、对齐和规范化的问题。

下次你再遇到需要给编号补零、对齐报表数据这类需求时,就可以直接想到用 lpad。它能让你的解决方案更简单、更健壮。你只要记住它的三个参数分别是什么意思,再小心那个字符串超长会被截断的坑,基本上就没什么问题了。

赞(0)
未经允许不得转载:七点爱学 » lpad是什么

评论 抢沙发

评论前必须登录!

立即登录   注册