Catégories :

Fonctions de chaîne et fonctions binaires (général)

LENGTH, LEN

Renvoie la longueur d’une chaîne ou d’une valeur binaire. Pour les chaînes, la longueur correspond au nombre de caractères et les caractères UTF-8 caractères comptés comme un seul caractère. Pour les valeurs binaires, la longueur est le nombre d’octets.

Syntaxe

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

Arguments

expression

L’expression d’entrée doit être une chaîne ou une valeur binaire.

Renvoie

Le type de données renvoyé est INTEGER (plus précisément, NUMBER(18, 0)).

Détails du classement

  • No impact. Dans les langues dans lesquelles un caractère est une lettre et inversement, LENGTH se comporte de la même manière avec et sans classement.

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

    • Dans les langues où une paire ou un triplet de caractères (par exemple, « dz ») est traité comme une seule lettre de l’alphabet, Snowflake mesure toujours la longueur en caractères et non en lettres. Par exemple, bien que le hongrois considère l’entrée « dz » comme une seule lettre, Snowflake renvoie 2 pour LENGTH(COLLATE('dz', 'hu')).

Exemples

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

Cet exemple utilise des données BINARY :

Créez et remplissez une table :

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

Sortie :

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