Freitag, 4. Januar 2013

Nach Unterstrich suchen in SQL

SQL bietet das Schlüsselwort LIKE, um Textvergleiche durchführen zu können. Die Syntax ist aber für alle, die reguläre Ausdrücke gewohnt sind, sehr gewöhnungsbedürftig. Eine beliebig lange Zeichenkette wird durch den regulären Ausdruck '.*' abgedeckt. Die Entsprechung in SQL ist das Prozentzeichen '%'. Will man nur ein einzelnes Zeichen abdecken reicht im regulären Ausdruck der Punkt '.' während man in SQL den Unterstrich '_' verwenden muss. Richtig lästig wird es aber erst beim Quoten. Typischerweise stellt sich das Problem bei regulären Ausdrücken für DNS-Namen und URLs. Der richtige reguläre Ausdruck für alle com-Domänen ist also '.*\.com'. Für jeden, der mal was C-ähnliches gelernt hat, a priori klar. Nicht so in SQL, da man in SQL mit dem Schlüsselwort ESCAPE für jeden String das passende Escape-Zeichen definieren muss. Das ist zwar flexibel aber umständlich wie man an dem folgenden Beispiel sieht, dass nach allen englischsprachigen Lokalisierungsbezeichnern sucht.
sqlite> create table locale (l10n text);
sqlite> insert into locale values ('en_US');
sqlite> select l10n from locale where l10n like 'en\_%' escape '\';
en_US

Keine Kommentare: