Mittwoch, April 13, 2011

Escape Ampersand in LIKE-Bedinungen

Angesichts des Titels frage ich mich mal wieder, ob ich nicht anfangen sollte, ins Englische überzugehen - dann bräuchte ich mich nicht dafür zu entschuldigen, dass ich keine brauchbare Übersetzung für "Escape" und "Ampersand" gefunden habe...

Dieser Tage wurde ich gefragt, wie man ein Ampersand-Symbol (&) in einer LIKE-Bedingung escapen kann (ja: he does it again), und glaubte, dass das einfach über eine ESCAPE-Klausel im LIKE funktionieren würde, was aber ein Schlag ins Wasser war:

select *
  from test;

MY_STRING
-----------
BLA&BLA

select *
  from test
 where my_string like '%/&BLA' escape '/';

Geben Sie einen Wert für bla ein:

Da das & für sqlplus als Ersetzungsvariable fungiert, wird hier eine Eingabe gefordert. Um das Verhalten zu ändern, kann man die Auswertung der Variable deaktivieren:

set define off

select *
  from test
 where my_string like '%&BLA';

MY_STRING
----------
BLA&BLA

In diesem Fall würde das Escape sogar einen Fehler hervorrufen ("ORA-01424: Zeichen nach dem Escape-Zeichen fehlen oder sind ungültig"), da das &-Zeichen nun in der Tat ein ganz gewöhnliches Element ist.

Alternativ kann man auch mit dem Kommando "SET ESCAPE ON" und dem default-Escape-Charakter Backslash (\) arbeiten:

set define on
set escape on
select *
  from test
 where my_string like '%\&BLA';

MY_STRING
----------
BLA&BLA

Keine Kommentare:

Kommentar veröffentlichen