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