- 类别:
:doc:`/sql-reference/functions-string`(通用)
LPAD¶
用另一个字符串中的字符向左填充字符串,或者用另一个二进制值中的字节向左填充二进制值。
使用 pad
实参中的字符/字节将实参 (base
) 向左填充为长度 length_expr
。
- 另请参阅:
语法¶
LPAD( <base>, <length_expr> [, <pad>] )
实参¶
base
VARCHAR 或 BINARY 值。
length_expr
计算结果为整数的表达式。它指定:
如果输入为 VARCHAR,返回的 UTF-8 字符数。
如果输入为 BINARY,返回的字节数。
pad
VARCHAR 或 BINARY 值。类型必须与
base
实参的数据类型匹配。此实参中的字符(或字节)用于填充base
。
返回¶
返回值的数据类型与输入值 base
(VARCHAR 或 BINARY)的数据类型相同。
使用说明¶
排序规则详细信息¶
排序规则适用于 VARCHAR 输入。如果第一个实参的输入数据类型为 BINARY,则排序规则不适用。
No impact. 尽管在语法上可以接受排序规则,但排序规则对处理没有影响。例如,某些语言的字母包含两个字符或三个字符(例如,匈牙利语中的“dzs”,捷克语中的“ch”),这些字母作为长度实参时仍会算作两个或三个字符(而不是一个字符)。
The collation of the result is the same as the collation of the input. 如果返回值作为嵌套函数调用的一部分传递给另一个函数,这可能很有用。
目前,Snowflake 允许
base
和pad
实参具有不同的排序规则说明符。但是,不能同时保留单个排序规则说明符,因为返回的值只有一个排序规则说明符。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');
查询表以显示数据:
SELECT * FROM padding_example;
+----------------+------------------------------+
| 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;
+----------------+----------------+----------------------+
| 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;
+------------------------------+----------------------+----------------------+
| B | PAD_WITH_BLANK | PAD_WITH_DOLLAR_SIGN |
|------------------------------+----------------------+----------------------|
| 2D3132332E3030 | 2020202D3132332E3030 | 2424242D3132332E3030 |
| 4869 | 20202020202020204869 | 24242424242424244869 |
| 5477656C766520446F6C6C617273 | 5477656C766520446F6C | 5477656C766520446F6C |
+------------------------------+----------------------+----------------------+
以下示例显示了使用多个字符时的左填充,以及填充长度不是用于填充的多字符的字符串长度的偶数倍数时的左填充:
SELECT LPAD('123.50', 19, '*_');
+--------------------------+
| LPAD('123.50', 19, '*_') |
|--------------------------|
| *_*_*_*_*_*_*123.50 |
+--------------------------+
输出显示返回了 19 个字符,最后一个 *
字符没有附带的 _
字符。