sql >> Base de Datos >  >> RDS >> Oracle

Cómo invertir una cadena en Oracle (11g) SQL sin usar la función REVERSE()

Si está tratando de evitar el reverse() no documentado podría usar la función utl_raw.reverse() función en cambio, también con la conversión adecuada y desde 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                                                                     

Eso es tomar un valor original; haciendo utl_i18n.string_to_raw() en ese; luego pasar eso a utl_raw.reverse(); luego pasando el resultado de eso de vuelta a través de utl_i18n.raw_to_char() .

No estoy del todo seguro de cómo se manejará eso con los caracteres de varios bytes, o qué te gustaría que sucediera con ellos de todos modos...

O una variación de la discusión a la que @RahulTripathi se vinculó , sin el manejo del juego de caracteres:

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                                                                     

Pero ese hilo también señala que solo funciona para caracteres de un solo byte.