カテゴリ:

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

LENGTH, LEN

入力 文字列またはバイナリ 値の長さを返します。文字列の長さは文字数であり、 UTF-8の文字は単一の文字としてカウントされます。バイナリの長さはバイト数です。

構文

LENGTH( <expression> )

LEN( <expression> )
Copy

引数

expression

入力式は文字列またはバイナリ値である必要があります。

戻り値

返されるデータ型は INTEGER (正確にはNUMBER(18、0))です。

照合順序の詳細

  • No impact. 1文字が1つの文字であり、その逆も成り立つ言語では、 LENGTH 関数は照合の有無にかかわらず同じ動作をします。

  • In languages where the alphabet contains digraphs or trigraphs (such as "Dz" and "Dzs" in Hungarian), each character in each digraph and trigraph is treated as an independent character, not as part of a single multi-character letter. 例えば、ハンガリー語では「dz」は1文字として扱われますが、Snowflakeは LENGTH(COLLATE('dz', 'hu')) に対して 2 を返します。

テーブルを作成して VARCHAR 値を挿入します。

CREATE OR REPLACE TABLE length_function_demo (s VARCHAR);

INSERT INTO length_function_demo VALUES
  (''),
  ('Joyeux Noël'),
  ('Merry Christmas'),
  ('Veselé Vianoce'),
  ('Wesołych Świąt'),
  ('圣诞节快乐'),
  (NULL);
Copy

LENGTH 関数を使用してテーブルをクエリします。

SELECT s, LENGTH(s) FROM length_function_demo;
Copy
+-----------------+-----------+
| S               | LENGTH(S) |
|-----------------+-----------|
|                 |         0 |
| Joyeux Noël     |        11 |
| Merry Christmas |        15 |
| Veselé Vianoce  |        14 |
| Wesołych Świąt  |        14 |
| 圣诞节快乐        |         5 |
| NULL            |      NULL |
+-----------------+-----------+

次の例では、テーブルを作成して BINARY データを挿入します。

CREATE OR REPLACE TABLE binary_demo_table (
  v VARCHAR,
  b_hex BINARY,
  b_base64 BINARY,
  b_utf8 BINARY);

INSERT INTO binary_demo_table (v) VALUES ('hello');

UPDATE binary_demo_table SET
  b_hex    = TO_BINARY(HEX_ENCODE(v), 'HEX'),
  b_base64 = TO_BINARY(BASE64_ENCODE(v), 'BASE64'),
  b_utf8   = TO_BINARY(v, 'UTF-8');

SELECT * FROM binary_demo_table;
Copy
+-------+------------+------------+------------+
| V     | B_HEX      | B_BASE64   | B_UTF8     |
|-------+------------+------------+------------|
| hello | 68656C6C6F | 68656C6C6F | 68656C6C6F |
+-------+------------+------------+------------+

LENGTH 関数を使用してテーブルをクエリします。

SELECT v, LENGTH(v),
       TO_VARCHAR(b_hex, 'HEX') AS b_hex, LENGTH(b_hex),
       TO_VARCHAR(b_base64, 'BASE64') AS b_base64, LENGTH(b_base64),
       TO_VARCHAR(b_utf8, 'UTF-8') AS b_utf8, LENGTH(b_utf8)
  FROM binary_demo_table;
Copy
+-------+-----------+------------+---------------+----------+------------------+--------+----------------+
| V     | LENGTH(V) | B_HEX      | LENGTH(B_HEX) | B_BASE64 | LENGTH(B_BASE64) | B_UTF8 | LENGTH(B_UTF8) |
|-------+-----------+------------+---------------+----------+------------------+--------+----------------|
| hello |         5 | 68656C6C6F |             5 | aGVsbG8= |                5 | hello  |              5 |
+-------+-----------+------------+---------------+----------+------------------+--------+----------------+