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