Database Reference
In-Depth Information
SELECT
title
FROM
movies
WHERE
title ILIKE
'stardust
_
%'
;
title
-------------------
Stardust Memories
Das ist in einfachen Fällen nützlich, doch
LIKE
ist auf simple Wildcards be-
schränkt.
Reguläre Ausdrücke
Eine wesentlich leistungsfähigere String-Matching-Syntax bieten
Reguläre
Ausdrücke
(Regex). Reguläre Ausdrücke erscheinen im gesamten Buch recht
oft, da viele Datenbanken sie unterstützen. Es gibt ganze Bücher, die sich nur
der Entwicklung leistungsfähiger regulärer Ausdrücke widmen - das Thema
ist bei Weitem zu kompliziert, um hier eingehender behandelt werden zu kön-
nen. Postgres ist (größtenteils) POSIX-konform.
Bei Postgres wird ein Regex-Match durch den Operator ~ eingeleitet, dem op-
tional ein ! (für
nicht
vorstehen) und ein * (für
schreibungsunabhängig
)folgen
kann. Wenn Sie also alle Filme zählen wollen, die
nicht
mit
the
beginnen, kön-
nen Sie die folgende schreibungsunabhängige Query verwenden. Die Zeichen
innerhalb des Strings sind der reguläre Ausdruck.
SELECT
COUNT(
*
)
FROM
movies
WHERE
title !~
*
'^the.
*
'
;
Sie können Strings für das Pattern Matching obiger Queries indexieren, in-
dem Sie einen
text
_
pattern
_
ops
-Operatorklassen-Index erzeugen, solange
die indexierten Werte kleingeschrieben sind.
CREATE INDEX
movies
_
title
_
pattern
ON
movies (lower(title) text
_
pattern
_
ops);
Wir haben
text
_
pattern
_
ops
verwendet, weil der Titel vom Typ
text
ist. Wenn
Sie varchars, chars, oder Namen indexieren müssen, verwenden Sie die ent-
sprechenden Operatoren
varchar
_
pattern
_
ops
,
bpchar
_
pattern
_
ops
und
name
_
pattern
_
ops
.
Levenshtein
Levenshtein ist ein Stringsvergleichsalgorithmus, der die Ähnlichkeit zwei-
er Strings vergleicht, indem er berechnet, wie viele
Schritte
notwendig sind,
um einen String in den anderen zu überführen. Jedes ersetzte, fehlende oder
hinzugefügte Zeichen gilt als Schritt. Die Distanz entspricht der Gesamtzahl
der Schritte. Bei PostgreSQL wird die
levenshtein()
-Funktion über das Zu-