Categorias:

Funções de cadeia de caracteres e binários (General)

LENGTH, LEN

Retorna o comprimento de uma cadeia de caracteres de entrada ou valor binário. Para cadeias de caracteres, o comprimento é o número de caracteres, e os caracteres UTF-8 são contados como um único caractere. Para binário, o comprimento é o número de bytes.

Sintaxe

LENGTH( <expression> )
LEN( <expression> )
Copy

Argumentos

expression

A expressão de entrada deve ser uma cadeia de caracteres ou um valor binário.

Retornos

O tipo de dados retornado é INTEGER (mais precisamente, NUMBER(18, 0)).

Detalhes do agrupamento

  • No impact. Nos idiomas em que um caractere é uma letra e vice-versa, LENGTH se comporta da mesma forma com e sem agrupamento.

  • 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.

    • Em idiomas onde um par ou três caracteres (por exemplo, “dz”) é tratado como uma única letra do alfabeto, o Snowflake ainda mede o comprimento em caracteres, não em letras. Por exemplo, embora o húngaro trate “dz” como uma única letra, o Snowflake retorna 2 para LENGTH(COLLATE('dz', 'hu')).

Exemplos

SELECT s, LENGTH (s) FROM strings;

----------------------+-----------+
          s           | length(s) |
----------------------+-----------+
                      | 0         |
 Joyeux Noël          | 11        |
 Merry Christmas      | 15        |
 Veselé Vianoce       | 14        |
 Wesołych Świąt       | 14        |
 圣诞节快乐             | 5         |
 [NULL]               | [NULL]    |
----------------------+-----------+
Copy

Este exemplo utiliza dados BINARY:

Criar e preencher uma tabela:

CREATE TABLE binary_table (v VARCHAR, 
  b_hex BINARY, b_base64 BINARY, b_utf8 BINARY);
INSERT INTO binary_table (v) VALUES ('hello');
UPDATE binary_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')
  ;
Copy

Saída:

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_table;
+-------+-----------+------------+---------------+----------+------------------+--------+----------------+
| 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 |
+-------+-----------+------------+---------------+----------+------------------+--------+----------------+
Copy