POSIX-Operatoren - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

POSIX-Operatoren

Ein regulärer POSIX-Ausdruck ist eine Zeichenfolge, die ein Übereinstimmungsmuster angibt. Eine Zeichenfolge entspricht einem regulären Ausdruck, wenn sie Teil der regulären Menge ist, die durch den regulären Ausdruck beschrieben wird.

Reguläre Ausdrücke entsprechend der POSIX-Spezifikation ermöglichen eine feinere Modellierung von Mustern als die Operatoren LIKE und SIMILAR TO. Bei regulären Ausdrücken entsprechend dem POSIX-Standard kann das Muster einer beliebigen Teilzeichenfolge entsprechen. Der Operator SIMILAR TO hingegen gibt „wahr“ genau dann zurück, wenn das Muster der gesamten Zeichenfolge entspricht.

Anmerkung

Patternmatching mit regulären Ausdrücken unter Verwendung von POSIX-Operatoren erfordert einen hohen Rechenaufwand. Wir empfehlen, nach Möglichkeit LIKE zu verwenden, insbesondere, wenn eine große Anzahl an Zeilen verarbeitet werden muss. Ein Beispiel: Die folgenden Abfragen sind funktional identisch, aber die Abfrage mit LIKE wird 7-mal schneller ausgeführt als die Abfrage mit einem regulären Ausdruck:

select count(*) from event where eventname ~ '.*(Ring|Die).*'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

Syntax

expression [ ! ] ~ pattern

Argumente

expression

Ein gültiger UTF8-Zeichenfolgenausdruck (beispielsweise ein Spaltenname).

!

Negationsoperator. Entspricht nicht dem regulären Ausdruck.

~

Führt eine Suche über beliebige Teilzeichenfolgen in dem Ausdruck expression und unter Berücksichtigung der Groß-/Kleinschreibung durch.

Anmerkung

Der Operator ~~ ist ein Synonym für LIKE.

pattern

Ein Zeichenfolgenliteral, das ein Muster für reguläre Ausdrücke darstellt.

Wenn das Muster pattern keine Platzhalterzeichen enthält, wird die Zeichenfolge selbst als Muster verwendet.

Um nach Zeichenfolgen zu suchen, die Metazeichen, beispielsweise . * | ? usw. enthalten, müssen Sie dieses Zeichen mit zwei umgekehrten Schrägstrichen ( \\) als Literal kennzeichnen. Im Gegensatz zu SIMILAR TO und LIKE unterstützen reguläre Ausdrücke entsprechend dem POSIX-Standard keine benutzerdefinierten Escape-Zeichenfolgen.

Die Zeichenfolgenausdrücke können vom Datentyp CHAR oder VARCHAR sein. Wenn unterschiedliche Datentypen verwendet werden, konvertiert Amazon Redshift pattern in den Datentyp des Ausdrucks expression.

Alle Zeichenfolgenausdrücke können vom Datentyp CHAR oder VARCHAR sein. Wenn in den Ausdrücken unterschiedliche Datentypen verwendet werden, konvertiert Amazon Redshift sie in den Datentyp des Ausdrucks expression.

POSIX unterstützt die folgenden Metazeichen in Mustern:

POSIX Beschreibung
. Entspricht einem beliebigen Zeichen.
* Findet 0 oder mehr Vorkommen.
+ Findet 1 oder mehr Vorkommen.
? Findet 0 oder 1 Vorkommen.
| Gibt alternative Übereinstimmungen an. Beispiel: E | H bedeutet E oder H.
^ Entspricht dem beginning-of-line Zeichen.
$ Entspricht dem end-of-line Zeichen.
$ Findet die Position am Ende der ganzen Zeichenfolge.
[ ] In eckigen Klammern steht eine Musterliste, aus der ein Element übereinstimmen muss. Ein der Liste vorangestelltes Caret-Zeichen (^) steht für eine Musterausschlussliste, die auf alle Zeichenfolgen außer den Ausdrücken in der Liste passt.
( ) Klammern fassen Elemente zu einem logischen Element zusammen.
{m} Wiederholt das vorangehende Element genau m Male.
{m,} Wiederholt das vorangehende Element m oder mehr Male.
{m,n} Wiederholt das vorangehende Element m bis n Male.
[: :] Passt auf alle Zeichen in einer POSIX-Zeichenklasse. In den folgenden Zeichenklassen unterstützt Amazon Redshift nur ASCII-Zeichen: [:alnum:], [:alpha:], [:lower:], [:upper:]

Amazon Redshift unterstützt die folgenden POSIX-Zeichenklassen:

Zeichenklasse Beschreibung
[[:alnum:]] Alle alphanumerischen ASCII-Zeichen
[[:alpha:]] Alle alphabetischen ASCII-Zeichen
[[:blank:]] Alle Whitespace-Zeichen
[[:cntrl:]] Alle Steuerzeichen (nicht druckbar)
[[:digit:]] Alle Ziffern
[[:lower:]] Alle ASCII-Kleinbuchstaben
[[:punct:]] Alle Interpunktionszeichen
[[:space:]] Alle Leerzeichen (nicht druckbar)
[[:upper:]] Alle ASCII-Großbuchstaben
[[:xdigit:]] Alle gültigen Hexadezimalzeichen

Amazon Redshift unterstützt in regulären Ausdrücken die folgenden Operatoren, die an Perl angelehnt sind. Wenn Sie den Operator nicht als Metazeichen verwenden möchten, müssen Sie ihn mit zwei umgekehrten Schrägstrichen () als Literal kennzeichnen. (‘\\’).  

Operator Beschreibung Entsprechender Zeichenklassenausdruck
\\d Eine Ziffer [[:digit:]]
\\D Ein Zeichen, das keine Ziffer ist [^[:digit:]]
\\w Ein Zeichen, das Bestandteil eines Worts sein kann [[:word:]]
\\W Ein Zeichen, das kein Bestandteil eines Worts sein kann [^[:word:]]
\\s Ein Whitespace-Zeichen [[:space:]]
\\S Ein Zeichen, das keinen Whitespace darstellt [^[:space:]]
\\b Ein Grenzwort

Beispiele

In der folgenden Tabelle werden Beispiele für Patternmatching unter Verwendung von POSIX-Operatoren dargestellt:

Ausdruck Rückgabewert
'abc' ~ 'abc' Wahr
'abc' ~ 'a' True
'abc' ~ 'A' False
'abc' ~ '.*(b|d).*' True
'abc' ~ '(b|c).*' True
'AbcAbcdefgefg12efgefg12' ~ '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' ~ 'a{6}.[1]{5}(x|y){2}' True
'$0.87' ~ '\\$[0-9]+(\\.[0-9][0-9])?' True
'ab c' ~ '[[:space:]]' True
'ab c' ~ '\\s' True
' ' ~ '\\S' Falsch

Das folgende Beispiel listet Städte auf, deren Name ein E oder ein H enthält:

SELECT DISTINCT city FROM users WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

Das folgende Beispiel listet Städte auf, deren Name weder E noch H enthält:

SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Aberdeen Abilene Ada Agat Agawam

In dem folgenden Beispiel wird die Escape-Zeichenfolge (\\) verwendet, um nach Zeichenfolgen zu suchen, die den Punkt (.) enthalten.

SELECT venuename FROM venue WHERE venuename ~ '.*\\..*' ORDER BY venueid; venuename ------------------------------ St. Pete Times Forum Jobing.com Arena Hubert H. Humphrey Metrodome U.S. Cellular Field Superpages.com Center E.J. Nutter Center Bernard B. Jacobs Theatre St. James Theatre