Oracle
 sql >> Database >  >> RDS >> Oracle

Come invertire una stringa in Oracle (11g) SQL senza utilizzare la funzione REVERSE()

Se stai cercando di evitare il reverse() non documentato funzione è possibile utilizzare il utl_raw.reverse() funzione invece, anche con opportuna conversione e da 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                                                                     

Quindi sta assumendo un valore originale; facendo utl_i18n.string_to_raw() su quello; quindi passandolo a utl_raw.reverse(); quindi ritrasmettendo il risultato attraverso utl_i18n.raw_to_char() .

Non sono del tutto sicuro di come si comporterà con i caratteri multibyte, o cosa vorresti succedere a quelli comunque...

O una variazione dalla la discussione a cui @RahulTripathi si è collegato , senza la gestione del set di caratteri:

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                                                                     

Ma quel thread rileva anche che funziona solo per caratteri a byte singolo.