跳到主要内容

LPAD

描述

LPAD 函数(Left Padding)用于在字符串左侧填充指定的字符,直到达到指定的长度。如果目标长度小于原字符串长度,则截断字符串。

语法

LPAD(<str>, <len>, <pad>)

参数

参数说明
<str>需要被填充的源字符串。类型:VARCHAR
<len>目标字符串的字符长度(非字节长度)。类型:INT
<pad>用于填充的字符串。类型:VARCHAR

返回值

返回 VARCHAR 类型,表示填充或截断后的字符串。

填充规则:

  • 如果 len > 原字符串长度:在左侧重复填充 pad 字符串,直到总长度达到 len
  • 如果 len = 原字符串长度:返回原字符串
  • 如果 len < 原字符串长度:截断字符串,只返回前 len 个字符
  • 按字符长度计算,支持 UTF-8 多字节字符

特殊情况:

  • 如果任一参数为 NULL,返回 NULL
  • 如果 pad 为空字符串且 len > str 长度,返回空字符串
  • 如果 len 为 0,返回空字符串
  • 如果 len 为负数,返回 NULL

示例

  1. 基本左侧填充
SELECT LPAD('hi', 5, 'xy'), LPAD('hello', 8, '*');
+---------------------+-----------------------+
| LPAD('hi', 5, 'xy') | LPAD('hello', 8, '*') |
+---------------------+-----------------------+
| xyxhi | ***hello |
+---------------------+-----------------------+
  1. 截断字符串
SELECT LPAD('hi', 1, 'xy'), LPAD('hello world', 5, 'x');
+---------------------+------------------------------+
| LPAD('hi', 1, 'xy') | LPAD('hello world', 5, 'x') |
+---------------------+------------------------------+
| h | hello |
+---------------------+------------------------------+
  1. NULL 值处理
SELECT LPAD(NULL, 5, 'x'), LPAD('hi', NULL, 'x'), LPAD('hi', 5, NULL);
+---------------------+------------------------+----------------------+
| LPAD(NULL, 5, 'x') | LPAD('hi', NULL, 'x') | LPAD('hi', 5, NULL) |
+---------------------+------------------------+----------------------+
| NULL | NULL | NULL |
+---------------------+------------------------+----------------------+
  1. 空字符串和零长度
SELECT LPAD('', 0, ''), LPAD('hi', 0, 'x'), LPAD('', 5, '*');
+-----------------+-------------------+--------------------+
| LPAD('', 0, '') | LPAD('hi', 0, 'x') | LPAD('', 5, '*') |
+-----------------+-------------------+--------------------+
| | | ***** |
+-----------------+-------------------+--------------------+
  1. 空填充字符串
SELECT LPAD('hello', 10, ''), LPAD('hi', 2, '');
+-----------------------+-------------------+
| LPAD('hello', 10, '') | LPAD('hi', 2, '') |
+-----------------------+-------------------+
| | hi |
+-----------------------+-------------------+
  1. 长填充字符串和循环
SELECT LPAD('123', 10, 'abc'), LPAD('X', 7, 'HELLO');
+--------------------------+-------------------------+
| LPAD('123', 10, 'abc') | LPAD('X', 7, 'HELLO') |
+--------------------------+-------------------------+
| abcabca123 | HELLOX |
+--------------------------+-------------------------+
  1. UTF-8 多字节字符填充
SELECT LPAD('hello', 10, 'ṭṛì'), LPAD('ḍḍumai', 3, 'x');
+---------------------------+--------------------------+
| LPAD('hello', 10, 'ṭṛì') | LPAD('ḍḍumai', 3, 'x') |
+---------------------------+--------------------------+
| ṭṛìṭṛhello | ḍḍu |
+---------------------------+--------------------------+
  1. 数字字符串格式化
SELECT LPAD('42', 6, '0'), LPAD('1234', 8, '0');
+--------------------+----------------------+
| LPAD('42', 6, '0') | LPAD('1234', 8, '0') |
+--------------------+----------------------+
| 000042 | 00001234 |
+--------------------+----------------------+
  1. 负数长度处理
SELECT LPAD('hello', -1, 'x'), LPAD('test', -5, '*');
+------------------------+------------------------+
| LPAD('hello', -1, 'x') | LPAD('test', -5, '*') |
+------------------------+------------------------+
| NULL | NULL |
+------------------------+------------------------+