カテゴリ:

文字列とバイナリ関数 (一般)

LPAD

別の文字列の文字を文字列の左に埋め込むか、別のバイナリ値のバイトをバイナリ値の左に埋め込みます。

引数(base)は、 length_expr 引数からの文字/バイトで長さ pad を左にパディングします。

こちらもご参照ください。

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. 照合は構文的に受け入れられますが、照合は処理に影響しません。たとえば、2文字や3文字の文字(例: ハンガリー語では「dzs」、チェコ語では「ch」)がある言語でも、長さの引数では(1文字ではなく)2文字や3文字として数えます。

  • The collation of the result is the same as the collation of the input. これは、戻り値がネストされた関数呼び出しの一部として別の関数に渡される場合に役立ちます。

  • 現在、Snowflakeでは、 base 引数と pad 引数で異なる照合指定子を使用できます。しかし、戻り値には照合順序指定子が1つしかないため、個々の照合順序指定子を両方保持することはできません。Snowflakeは、 pad 文字列とは異なる照合を持つ base 文字列の使用を避けることをお勧めします。

これらの例では、 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文字が返されたことを示しており、最後の * 文字には _ 文字が付随していません。