MySQL 中的 LPAD() 和 RPAD() 函数
LPAD() 和 RPAD() 函数是 MySQL 中的两个字符串函数。它们用于向字符串的左侧(LPAD)或右侧(RPAD)填充指定的字符,以使字符串达到指定的长度。
这两个函数都需要三个参数:
要填充的字符串
要填充的长度
要使用的填充字符
LPAD() 函数
LPAD() 函数将指定的字符添加到字符串的左侧,直到字符串的长度达到指定的长度。如果原始字符串的长度大于指定的长度,LPAD() 函数将返回原始字符串。
LPAD('hello', 10, 'x')
-- 返回 'xxxxxhello'
在上面的示例中,'hello' 已经比要求的长度(10)短,因此使用 'x' 填充字符串,直到字符串的长度达到 10。
LPAD('hello', 3, 'x')
-- 返回 'hello'
在上面的示例中,原始字符串的长度(5)已经大于要求的长度(3),因此 LPAD() 函数直接返回原始字符串。
RPAD() 函数
RPAD() 函数将指定的字符添加到字符串的右侧,直到字符串的长度达到指定的长度。如果原始字符串的长度大于指定的长度,RPAD() 函数将返回原始字符串。
RPAD('hello', 10, 'x')
-- 返回 'helloxxxxx'
在上面的示例中,'hello' 已经比要求的长度(10)短,因此使用 'x' 填充字符串,直到字符串的长度达到 10。
RPAD('hello', 3, 'x')
-- 返回 'hello'
在上面的示例中,原始字符串的长度(5)已经大于要求的长度(3),因此 RPAD() 函数直接返回原始字符串。
LPAD() 和 RPAD() 函数:返回值
如果原始字符串的长度大于 LPAD() 或 RPAD() 函数中指定的参数长度,MySQL 将返回原始字符串。这个行为在 MySQL 5.6 中是规定的,也是 MySQL 5.7 和 8.0 中的行为,因此我们可以放心地在代码中使用这些函数。
下面是一个 LPAD() 函数的示例,其中原始字符串的长度小于要求的长度,填充的字符为 '0':
SELECT LPAD('123', 5, '0')
-- 返回 '00123'
下面是一个 LPAD() 函数的示例,其中原始字符串的长度大于要求的长度:
SELECT LPAD('12345', 3, '0')
-- 返回 '12345'
在这个示例中,原始字符串的长度(5)大于要求的长度(3),因此 LPAD() 函数直接返回原始字符串。
下面是一个 RPAD() 函数的示例,其中原始字符串的长度小于要求的长度,填充的字符为 'x':
SELECT RPAD('hello', 10, 'x')
-- 返回 'helloxxxxx'
下面是一个 RPAD() 函数的示例,其中原始字符串的长度大于要求的长度:
SELECT RPAD('hello', 3, 'x')
-- 返回 'hello'
在这个示例中,原始字符串的长度(5)大于要求的长度(3),因此 RPAD() 函数直接返回原始字符串。
LPAD() 和 RPAD() 函数:用途
LPAD() 和 RPAD() 函数可用于多种应用程序:
向字符串的左侧或右侧添加填充字符,以使所有字符串具有相同的长度,从而方便比较和排序。
格式化数字或日期字符串。
下面是几个使用 LPAD() 函数的示例:
将 10 进制数转换为二进制数,并用前导零填充字符串,使字符串总长度为 8(如果字符串比 8 长,它将返回原始字符串):
SELECT LPAD(CONV('10', 10, 2), 8, '0')
-- 返回 '00001010'
将日期字符串格式化为 'YYYY-MM-DD' 的形式:
SELECT CONCAT(YEAR('2019-07-08'), '-', LPAD(MONTH('2019-07-08'), 2, '0'), '-', LPAD(DAY('2019-07-08'), 2, '0'))
-- 返回 '2019-07-08'
比较或排序字符串。如果字符串没有相同的长度,您不能有效地比较它们或对它们进行排序:
SELECT name FROM mytable ORDER BY LPAD(name, 10, '0')
-- 按照字符串长度为 10 且填充字符为 '0' 对字符串进行排序
总结
LPAD() 和 RPAD() 函数是 MySQL 中用于填充字符串的两个函数。它们可以向字符串的左侧或右侧添加指定的字符,使字符串达到指定的长度。如果原始字符串的长度大于指定的长度,这两个函数会直接返回原始字符串。
这两个函数主要用于将字符串格式化为适合比较或排序的形式,或者将数字或日期字符串格式化为更可读的形式。
要注意的是,如果您的字符串长度不是固定的,请考虑使用其他字符串函数,例如 SUBSTRING() 或 CONCAT()。