RPAD
描述
RPAD 函数(Right Padding)用于在字符串右侧填充指定的字符,直到达到指定的长度。如果目标长度小于原字符串长度,则截断字符串。该函数按字符长度计算,而非字节长度.
语法
RPAD(<str>, <len>, <pad>)
参数
| 参数 | 说明 |
|---|---|
<str> | 需要被填充的源字符串。类型:VARCHAR |
<len> | 目标字符串的字符长度(非字节长度)。类型:INT |
<pad> | 用于填充的字符串。类型:VARCHAR |
返回值
返回 VARCHAR 类型,表示填充或截断后的字符串。
填充规则:
- 如果 len > 原字符串长度:在右侧重复填充 pad 字符串,直到总长度达到 len
- 如果 len = 原字符串长度:返回原字符串
- 如果 len < 原字符串长度:截断字符串,只返回前 len 个字符
- pad 字符串会循环使用,可能只使用部分字符
- 按字符长度计算,支持 UTF-8 多字节字符
特殊情况:
- 如果任一参数为 NULL,返回 NULL
- 如果 pad 为空字符串且 len > str 长度,返回空字符串
- 如果 len 为 0,返回空字符串
- 如果 len 为负数,返回 NULL
示例
- 基本右侧填充
SELECT RPAD('hi', 5, 'xy'), RPAD('hello', 8, '*');
+---------------------+-----------------------+
| RPAD('hi', 5, 'xy') | RPAD('hello', 8, '*') |
+---------------------+-----------------------+
| hixyx | hello*** |
+---------------------+-----------------------+
- 截断字符串
SELECT RPAD('hello', 1, ''), RPAD('hello world', 5, 'x');
+----------------------+------------------------------+
| RPAD('hello', 1, '') | RPAD('hello world', 5, 'x') |
+----------------------+------------------------------+
| h | hello |
+----------------------+------------------------------+
- NULL 值处理
SELECT RPAD(NULL, 5, 'x'), RPAD('hi', NULL, 'x'), RPAD('hi', 5, NULL);
+---------------------+------------------------+----------------------+
| RPAD(NULL, 5, 'x') | RPAD('hi', NULL, 'x') | RPAD('hi', 5, NULL) |
+---------------------+------------------------+----------------------+
| NULL | NULL | NULL |
+---------------------+------------------------+----------------------+
- 空字符串和零长度
SELECT RPAD('', 0, ''), RPAD('hi', 0, 'x'), RPAD('', 5, '*');
+-----------------+-------------------+--------------------+
| RPAD('', 0, '') | RPAD('hi', 0, 'x') | RPAD('', 5, '*') |
+-----------------+-------------------+--------------------+
| | | ***** |
+-----------------+-------------------+--------------------+
- 空填充字符串
SELECT RPAD('hello', 10, ''), RPAD('hi', 2, '');
+-----------------------+-------------------+
| RPAD('hello', 10, '') | RPAD('hi', 2, '') |
+-----------------------+-------------------+
| | hi |
+-----------------------+-------------------+
- 长填充字符串和循环
SELECT RPAD('hello', 10, 'world'), RPAD('X', 7, 'ABC');
+----------------------------+----------------------+
| RPAD('hello', 10, 'world') | RPAD('X', 7, 'ABC') |
+----------------------------+----------------------+
| helloworld | XABCABC |
+----------------------------+----------------------+
- UTF-8 多字节字符填充
SELECT RPAD('hello', 10, 'ṭṛì'), RPAD('ḍḍumai', 3, 'x');
+---------------------------+--------------------------+
| RPAD('hello', 10, 'ṭṛì') | RPAD('ḍḍumai', 3, 'x') |
+---------------------------+--------------------------+
| helloṭṛìṭṛ | ḍḍu |
+---------------------------+--------------------------+
- 数字字符串格式化
SELECT RPAD('$99', 8, '.'), RPAD('Item1', 10, ' ');
+---------------------+------------------------+
| RPAD('$99', 8, '.') | RPAD('Item1', 10, ' ') |
+---------------------+------------------------+
| $99..... | Item1 |
+---------------------+------------------------+
- 表格列对齐
SELECT RPAD('Name', 15, ' '), RPAD('Price', 10, ' ');
+------------------------+------------------------+
| RPAD('Name', 15, ' ') | RPAD('Price', 10, ' ') |
+------------------------+------------------------+
| Name | Price |
+------------------------+------------------------+
- 负数长度处理
SELECT RPAD('hello', -1, 'x'), RPAD('test', -5, '*');
+------------------------+------------------------+
| RPAD('hello', -1, 'x') | RPAD('test', -5, '*') |
+------------------------+------------------------+
| NULL | NULL |
+------------------------+------------------------+