Kategorien:

Zeichenfolgen- und Binärfunktionen (Allgemein)

LENGTH, LEN

Gibt die Länge einer Eingabezeichenfolge oder eines Binärwertes zurück. Bei Zeichenfolgen entspricht die Länge der Anzahl der Zeichen; UTF-8-Zeichen werden als Einzelzeichen gezählt. Bei Binärwerten entspricht die Länge der Anzahl der Bytes.

Syntax

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

Argumente

expression

Der Eingabeausdruck muss eine Zeichenfolge oder ein Binärwert sein.

Rückgabewerte

Der zurückgegebene Datentyp ist INTEGER (genauer gesagt NUMBER(18, 0)).

Sortierungsdetails

  • No impact. In Sprachen, in denen ein Zeichen ein Buchstabe ist und umgekehrt, verhält sich LENGTH mit und ohne Sortierung gleich.

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

    • In Sprachen, in denen ein Zeichenpaar oder -tripel (z. B. „dz“) als einzelner Buchstabe des Alphabets behandelt wird, misst Snowflake die Länge weiterhin in Zeichen und nicht in Buchstaben. Obwohl im Ungarischen „dz“ als ein einzelner Buchstaben behandelt wird, gibt Snowflake beispielsweise für LENGTH(COLLATE('dz', 'hu')) 2 zurück.

Beispiele

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

In diesem Beispiel werden BINARY-Daten verwendet:

Erstellen Sie eine Tabelle, und füllen Sie diese:

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

Ausgabe:

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