跳到主要内容

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

示例

  1. 基本右侧填充
SELECT RPAD('hi', 5, 'xy'), RPAD('hello', 8, '*');
+---------------------+-----------------------+
| RPAD('hi', 5, 'xy') | RPAD('hello', 8, '*') |
+---------------------+-----------------------+
| hixyx | hello*** |
+---------------------+-----------------------+
  1. 截断字符串
SELECT RPAD('hello', 1, ''), RPAD('hello world', 5, 'x');
+----------------------+------------------------------+
| RPAD('hello', 1, '') | RPAD('hello world', 5, 'x') |
+----------------------+------------------------------+
| h | hello |
+----------------------+------------------------------+
  1. 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 |
+---------------------+------------------------+----------------------+
  1. 空字符串和零长度
SELECT RPAD('', 0, ''), RPAD('hi', 0, 'x'), RPAD('', 5, '*');
+-----------------+-------------------+--------------------+
| RPAD('', 0, '') | RPAD('hi', 0, 'x') | RPAD('', 5, '*') |
+-----------------+-------------------+--------------------+
| | | ***** |
+-----------------+-------------------+--------------------+
  1. 空填充字符串
SELECT RPAD('hello', 10, ''), RPAD('hi', 2, '');
+-----------------------+-------------------+
| RPAD('hello', 10, '') | RPAD('hi', 2, '') |
+-----------------------+-------------------+
| | hi |
+-----------------------+-------------------+
  1. 长填充字符串和循环
SELECT RPAD('hello', 10, 'world'), RPAD('X', 7, 'ABC');
+----------------------------+----------------------+
| RPAD('hello', 10, 'world') | RPAD('X', 7, 'ABC') |
+----------------------------+----------------------+
| helloworld | XABCABC |
+----------------------------+----------------------+
  1. UTF-8 多字节字符填充
SELECT RPAD('hello', 10, 'ṭṛì'), RPAD('ḍḍumai', 3, 'x');
+---------------------------+--------------------------+
| RPAD('hello', 10, 'ṭṛì') | RPAD('ḍḍumai', 3, 'x') |
+---------------------------+--------------------------+
| helloṭṛìṭṛ | ḍḍu |
+---------------------------+--------------------------+
  1. 数字字符串格式化
SELECT RPAD('$99', 8, '.'), RPAD('Item1', 10, ' ');
+---------------------+------------------------+
| RPAD('$99', 8, '.') | RPAD('Item1', 10, ' ') |
+---------------------+------------------------+
| $99..... | Item1 |
+---------------------+------------------------+
  1. 表格列对齐
SELECT RPAD('Name', 15, ' '), RPAD('Price', 10, ' ');
+------------------------+------------------------+
| RPAD('Name', 15, ' ') | RPAD('Price', 10, ' ') |
+------------------------+------------------------+
| Name | Price |
+------------------------+------------------------+
  1. 负数长度处理
SELECT RPAD('hello', -1, 'x'), RPAD('test', -5, '*');
+------------------------+------------------------+
| RPAD('hello', -1, 'x') | RPAD('test', -5, '*') |
+------------------------+------------------------+
| NULL | NULL |
+------------------------+------------------------+