===== Die Oracle SQL reverse Funktion - Einen String in SQL umdrehen =====
Gelegentlich soll ein String von hinten gelesen werden, diese kann mit der undokumentierten **reverse** Funktion erfolgen.
Beispiel:
select reverse('Gunther') from dual;
REVERSE
-------
rehtnuG
-- test mit PL/SQL
set serveroutput on
declare
v_test varchar2(100);
begin
select reverse('Gunther') into v_test from dual;
dbms_output.put_line(v_test);
end;
/
rehtnuG
=== Dokumentierte Variante mit DBMS_RAW ===
Mit dem DBMS_RAW Package steht auch eine dokumentierte Funktion zur Verfügung.
Beispiel:
select UTL_RAW.CAST_TO_VARCHAR2( UTL_RAW.REVERSE( UTL_RAW.CAST_TO_RAW( 'Gunther'))) from dual
/
UTL_RAW.CAST_TO_VA
------------------
rehtnuG
siehe http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_raw.htm#i1003598
=== Einsatz Beispiel ===
Es sollen alle EMail Adressen von einem Provider mit verschiedenen Subdomains aus einer Adresse Tabelle gelesen werden.
Beispiel:
# Dummy code:
select reverse('gunther@sub.hohkng.cm') from dual where reverse('gunther@sub.hohkng.cm') like 'mc.gnkhoh%';
Damit ist das "%" nicht am Anfang des Suchstrings und es kann auch ein function Based Index eingesetzt werden.
==== Quellen ====
* http://www.dbasupport.com/forums/showthread.php?18399-Reverse%28%29-function-in-oracle