Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment inverser une chaîne dans Oracle (11g) SQL sans utiliser la fonction REVERSE()

Si vous essayez d'éviter le non documenté reverse() fonction, vous pouvez utiliser le utl_raw.reverse() fonction à la place, avec une conversion appropriée également et à partir 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                                                                     

Donc, cela prend une valeur d'origine; faire utl_i18n.string_to_raw() sur ça; puis en le passant à utl_raw.reverse(); puis en passant le résultat à travers utl_i18n.raw_to_char() .

Je ne sais pas exactement comment cela fonctionnera avec les caractères multi-octets, ou ce que vous voudriez qu'il leur arrive de toute façon...

Ou une variante de la discussion liée à @RahulTripathi , sans la gestion du jeu de caractères :

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                                                                     

Mais ce fil note également qu'il ne fonctionne que pour les caractères à un octet.