Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So kehren Sie eine Zeichenfolge in Oracle (11g) SQL um, ohne die Funktion REVERSE() zu verwenden

Wenn Sie versuchen, das undokumentierte reverse() zu vermeiden Funktion könnten Sie die utl_raw.reverse() Funktion stattdessen auch mit entsprechender Konvertierung und von RAW:

select utl_i18n.raw_to_char(
  utl_raw.reverse(
    utl_i18n.string_to_raw('Some string', 'AL32UTF8')), 'AL32UTF8')
from dual;

UTL_I18N.RAW_TO_CHAR(UTL_RAW.REVERSE(UTL_I18N.STRING_TO_RAW('SOMESTRING','AL32UT
--------------------------------------------------------------------------------
gnirts emoS                                                                     

Das nimmt also einen ursprünglichen Wert; tun utl_i18n.string_to_raw() auf diesem; dann übergeben Sie das an utl_raw.reverse(); dann das Ergebnis davon durch utl_i18n.raw_to_char() zurückgeben .

Ich bin mir nicht ganz sicher, wie das mit Multibyte-Zeichen zurechtkommt, oder was mit denen passieren soll...

Oder eine Variation von der Diskussion, auf die @RahulTripathi verlinkt ist , ohne die Zeichensatzbehandlung:

select utl_raw.cast_to_varchar2(utl_raw.reverse(utl_raw.cast_to_raw('Some string')))
from dual;

UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.REVERSE(UTL_RAW.CAST_TO_RAW('SOMESTRING')))   
--------------------------------------------------------------------------------
gnirts emoS                                                                     

Aber dieser Thread stellt auch fest, dass es nur für Single-Byte-Zeichen funktioniert.