类别:

字符串和二进制函数 (通用)

LPAD

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

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

语法

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

实参

base

这必须是 VARCHARBINARY 值。

length_expr

长度应该是一个计算结果为整数的表达式。它应该指定:

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

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

pad

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

返回

返回值的数据类型与输入值 baseBINARYVARCHAR)的数据类型相同。

使用说明

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

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

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

排序规则详细信息

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

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

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

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

示例

此示例显示了 VARCHARBINARY 数据的填充:

创建并填写表:

CREATE TABLE demo (v VARCHAR, b BINARY);
INSERT INTO demo (v, b) SELECT 'Hi', HEX_ENCODE('Hi');
INSERT INTO demo (v, b) SELECT '-123.00', HEX_ENCODE('-123.00');
INSERT INTO demo (v, b) SELECT 'Twelve Dollars', 
  TO_BINARY(HEX_ENCODE('Twelve Dollars'), 'HEX');
Copy

演示 VARCHAR 的填充:

SELECT v, LPAD(v, 10, ' '),             
          LPAD(v, 10, '$')
    FROM demo
    ORDER BY v;
+----------------+------------------+------------------+
| V              | LPAD(V, 10, ' ') | LPAD(V, 10, '$') |
|----------------+------------------+------------------|
| -123.00        |    -123.00       | $$$-123.00       |
| Hi             |         Hi       | $$$$$$$$Hi       |
| Twelve Dollars | Twelve Dol       | Twelve Dol       |
+----------------+------------------+------------------+
Copy

演示 BINARY 的填充:

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 demo
    ORDER BY b;
+------------------------------+----------------------+----------------------+
| B                            | PAD_WITH_BLANK       | PAD_WITH_DOLLAR_SIGN |
|------------------------------+----------------------+----------------------|
| 2D3132332E3030               | 2020202D3132332E3030 | 2424242D3132332E3030 |
| 4869                         | 20202020202020204869 | 24242424242424244869 |
| 5477656C766520446F6C6C617273 | 5477656C766520446F6C | 5477656C766520446F6C |
+------------------------------+----------------------+----------------------+
Copy

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

SELECT LPAD('123.50', 19, '*_');
+--------------------------+
| LPAD('123.50', 19, '*_') |
|--------------------------|
| *_*_*_*_*_*_*123.50      |
+--------------------------+
Copy
语言: 中文