- Kategorien:
Zeichenfolgen- und Binärfunktionen (Allgemein)
STRTOK¶
Übersetzt eine angegebene Zeichenfolge in Token und gibt den angeforderten Teil zurück.
- Siehe auch:
Syntax¶
STRTOK(<string> [,<delimiter>] [,<partNumber>])
Argumente¶
Benötigt:
stringText, der in Token übersetzt werden soll.
Optional:
delimiterText, der die Trennzeichen darstellt, anhand der in Token übersetzt werden soll. Jedes Zeichen in der Trennzeichenfolge ist ein separates Trennzeichen. Wenn zum Beispiel das Trennzeichen
'@.'ist und dann sowohl'@'als auch'.'als Trennzeichen behandelt werden. Dieses Verhalten unterscheidet sich von SPLIT_PART, wodurch das gesamte Trennzeichen als eine einzige Trennzeichenfolge behandelt wird.Wenn das Trennzeichen und die
stringleer sind, gibt die Funktion NULL zurück. Wenn das Trennzeichen leer ist, aber diestringnicht leer ist, wird die gesamte Zeichenfolge als ein Token behandelt.Standard: Ein einzelnes Leerzeichen
partNumberAngefordertes Token, das 1-basiert ist, sodass das erste Token Token Nummer 1 ist, nicht Token Nummer 0. Wenn die Token-Nummer außerhalb des Geltungsbereichs liegt, wird NULL zurückgegeben.
Standardeinstellung: 1
Rückgabewerte¶
Der Datentyp des zurückgegebenen Werts ist VARCHAR.
Wenn der angeforderte Teil nicht existiert oder ein Argument NULL ist, dann wird NULL zurückgegeben.
Nutzungshinweise¶
Ähnlich wie bei Linux strtok() gibt STRTOK niemals eine leere Zeichenfolge als Token zurück. Dieses Verhalten unterscheidet sich von SPLIT_PART, wodurch leere Zeichenfolgen als Teile zurückgeben werden können, wenn die Eingabezeichenfolge mit dem Trennzeichen beginnt oder endet, oder wenn es aufeinanderfolgende Trennzeichen gibt.
Beispiele¶
Die folgenden Beispiele rufen die Funktion STRTOK auf.
Zurückgeben des ersten Tokens in einer Zeichenfolge¶
Im folgenden einfachen Beispiel wird STRTOK aufgerufen, um das erste Token in einer Zeichenfolge zurückzugeben:
SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a |
+-------------------------+
Verwenden von mehreren Trennzeichen, um verschiedene Token zurückzugeben¶
Im folgenden Beispiel wird gezeigt, wie Sie mehrere Trennzeichen verwenden, um das erste, zweite und dritte Token zurückzugeben, wobei die Trennzeichen @ und . sind:
SELECT STRTOK('user@snowflake.com', '@.', 1);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 1) |
|---------------------------------------|
| user |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 2);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 3);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com |
+---------------------------------------+
Demonstrieren der Indizierung nach dem letzten möglichen Token in der Zeichenfolge¶
Im folgenden Beispiel wird gezeigt, was geschieht, wenn Sie nach dem letzten möglichen Token in der Zeichenfolge indexieren:
SELECT STRTOK('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL |
+----------------------------------------+
Demonstrieren, wie sich das erste Element hinter dem Ende der Zeichenfolge befinden kann¶
In diesem Beispiel ist die Eingabezeichenfolge leer, und es gibt keine -Elemente. Das erste Element befindet sich also hinter dem Ende der Zeichenfolge, und die Funktion gibt anstelle einer leeren Zeichenfolge NULL zurück:
SELECT STRTOK('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL |
+-------------------+
Aufrufen von STRTOK mit einem leeren Trennzeichen¶
Hier ist ein Beispiel mit einer leeren Trennzeichenfolge:
SELECT STRTOK('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b |
+----------------------+
Demonstrieren von NULL-Werten für Argumente¶
Die folgenden Beispiele geben NULL-Werte für jedes der Argumente an:
SELECT STRTOK(NULL, '.', 1);
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL |
+----------------------+
SELECT STRTOK('a.b', NULL, 1);
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL |
+------------------------+
SELECT STRTOK('a.b', '.', NULL);
+--------------------------+
| STRTOK('A.B', '.', NULL) |
|--------------------------|
| NULL |
+--------------------------+
Demonstrieren von Unterschieden zwischen STRTOK und SPLIT_PART¶
Dieses Beispiel zeigt den Unterschied zwischen STRTOK und SPLIT_PART bei Verwendung von wiederholten Trennzeichen. STRTOK behandelt jedes Zeichen in der Trennzeichenfolge '|-' als separates Trennzeichen, das an jedem '|'- und '-'-Zeichen geteilt wird. Im Gegensatz dazu behandelt SPLIT_PART die gesamte Trennzeichenfolge '|-' als ein einziges Trennzeichen, sodass es nur dort geteilt wird, wo diese exakte Sequenz erscheint:
SELECT STRTOK('data1||data2|-data3---data4', '|-', 1) AS strtok_1,
STRTOK('data1||data2|-data3---data4', '|-', 2) AS strtok_2,
STRTOK('data1||data2|-data3---data4', '|-', 3) AS strtok_3,
STRTOK('data1||data2|-data3---data4', '|-', 4) AS strtok_4,
SPLIT_PART('data1||data2|-data3---data4', '|-', 1) AS split_part_1,
SPLIT_PART('data1||data2|-data3---data4', '|-', 2) AS split_part_2,
SPLIT_PART('data1||data2|-data3---data4', '|-', 3) AS split_part_3;
+----------+----------+----------+----------+-----------------+--------------+--------------+
| STRTOK_1 | STRTOK_2 | STRTOK_3 | STRTOK_4 | SPLIT_PART_1 | SPLIT_PART_2 | SPLIT_PART_3 |
|----------+----------+----------+----------+-----------------+--------------+--------------|
| data1 | data2 | data3 | data4 | data1||data2 | data3---data4| |
+----------+----------+----------+----------+-----------------+--------------+--------------+