Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como reverter uma string no Oracle (11g) SQL sem usar a função REVERSE()


Se você está tentando evitar o reverse() não documentado você pode usar o utl_raw.reverse() função em vez disso, com conversão apropriada também e de 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                                                                     

Então isso está tomando um valor original; fazendo utl_i18n.string_to_raw() naquilo; em seguida, passando isso para utl_raw.reverse(); em seguida, passando o resultado de volta através de utl_i18n.raw_to_char() .

Não tenho certeza de como isso vai lidar com caracteres multibyte, ou o que você gostaria que acontecesse com eles de qualquer maneira ...

Ou uma variação da a discussão que @RahulTripathi vinculou , sem a manipulação do conjunto 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                                                                     

Mas esse segmento também observa que só funciona para caracteres de byte único.