类别:

:doc:`/sql-reference/functions-string`(通用)

LPAD

用另一个字符串中的字符向左填充字符串,或者用另一个二进制值中的字节向左填充二进制值。

使用 pad 实参中的字符/字节将实参 (base) 向左填充为长度 length_expr

另请参阅:

RPAD

语法

LPAD( <base>, <length_expr> [, <pad>] )
Copy

实参

base

VARCHAR 或 BINARY 值。

length_expr

计算结果为整数的表达式。它指定:

  • 如果输入为 VARCHAR,返回的 UTF-8 字符数。

  • 如果输入为 BINARY,返回的字节数。

pad

VARCHAR 或 BINARY 值。类型必须与 base 实参的数据类型匹配。此实参中的字符(或字节)用于填充 base

返回

返回值的数据类型与输入值 base (VARCHAR 或 BINARY)的数据类型相同。

使用说明

  • 如果 base 实参比 length_expr 长,则被截断为 length_expr 长度。

  • pad 实参的长度可以是多个字符/字节。在结果中重复实参 pad,直到达到所需的长度 (length_expr),截断 pad 实参中任何多余的字符/字节。如果 pad 实参为空,则不会插入填充,但结果仍会截断为 length_expr 长度。

  • base 为字符串时,默认 pad 字符串值为 ``' '``(单个空格)。当 base 为二进制值时,必须明确提供 pad 实参。

排序规则详细信息

  • 排序规则适用于 VARCHAR 输入。如果第一个实参的输入数据类型为 BINARY,则排序规则不适用。

  • No impact. 尽管在语法上可以接受排序规则,但排序规则对处理没有影响。例如,某些语言的字母包含两个字符或三个字符(例如,匈牙利语中的“dzs”,捷克语中的“ch”),这些字母作为长度实参时仍会算作两个或三个字符(而不是一个字符)。

  • The collation of the result is the same as the collation of the input. 如果返回值作为嵌套函数调用的一部分传递给另一个函数,这可能很有用。

  • 目前,Snowflake 允许 basepad 实参具有不同的排序规则说明符。但是,不能同时保留单个排序规则说明符,因为返回的值只有一个排序规则说明符。Snowflake 建议您避免使用与 base 字符串具有不同排序规则的 pad 字符串。

示例

以下示例使用 LPAD 函数对 VARCHAR 和 BINARY 数据进行左填充。

创建并填写表:

CREATE OR REPLACE TABLE padding_example (v VARCHAR, b BINARY);

INSERT INTO padding_example (v, b)
  SELECT
    'Hi',
    HEX_ENCODE('Hi');

INSERT INTO padding_example (v, b)
  SELECT
    '-123.00',
    HEX_ENCODE('-123.00');

INSERT INTO padding_example (v, b)
  SELECT
    'Twelve Dollars',
    TO_BINARY(HEX_ENCODE('Twelve Dollars'), 'HEX');
Copy

查询表以显示数据:

SELECT * FROM padding_example;
Copy
+----------------+------------------------------+
| V              | B                            |
|----------------+------------------------------|
| Hi             | 4869                         |
| -123.00        | 2D3132332E3030               |
| Twelve Dollars | 5477656C766520446F6C6C617273 |
+----------------+------------------------------+

以下示例演示了使用 LPAD 函数对 VARCHAR 值进行左填充,并将结果限制为 10 个字符:

SELECT v,
       LPAD(v, 10, ' ') AS pad_with_blank,
       LPAD(v, 10, '$') AS pad_with_dollar_sign
  FROM padding_example
  ORDER BY v;
Copy
+----------------+----------------+----------------------+
| V              | PAD_WITH_BLANK | PAD_WITH_DOLLAR_SIGN |
|----------------+----------------+----------------------|
| -123.00        |    -123.00     | $$$-123.00           |
| Hi             |         Hi     | $$$$$$$$Hi           |
| Twelve Dollars | Twelve Dol     | Twelve Dol           |
+----------------+----------------+----------------------+

以下示例演示了使用 LPAD 函数对 BINARY 值进行左填充,并将结果限制为 10 个字节:

SELECT b,
       LPAD(b, 10, TO_BINARY(HEX_ENCODE(' '))) AS pad_with_blank,
       LPAD(b, 10, TO_BINARY(HEX_ENCODE('$'))) AS pad_with_dollar_sign
  FROM padding_example
  ORDER BY b;
Copy
+------------------------------+----------------------+----------------------+
| B                            | PAD_WITH_BLANK       | PAD_WITH_DOLLAR_SIGN |
|------------------------------+----------------------+----------------------|
| 2D3132332E3030               | 2020202D3132332E3030 | 2424242D3132332E3030 |
| 4869                         | 20202020202020204869 | 24242424242424244869 |
| 5477656C766520446F6C6C617273 | 5477656C766520446F6C | 5477656C766520446F6C |
+------------------------------+----------------------+----------------------+

以下示例显示了使用多个字符时的左填充,以及填充长度不是用于填充的多字符的字符串长度的偶数倍数时的左填充:

SELECT LPAD('123.50', 19, '*_');
Copy
+--------------------------+
| LPAD('123.50', 19, '*_') |
|--------------------------|
| *_*_*_*_*_*_*123.50      |
+--------------------------+

输出显示返回了 19 个字符,最后一个 * 字符没有附带的 _ 字符。

语言: 中文