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

Sådan vender du en streng i Oracle (11g) SQL uden at bruge REVERSE()-funktionen

Hvis du forsøger at undgå den udokumenterede reverse() funktionen kan du bruge utl_raw.reverse() funktion i stedet også med passende konvertering og fra 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                                                                     

Så det er at tage en original værdi; laver utl_i18n.string_to_raw() på det; derefter sende det til utl_raw.reverse(); derefter sende resultatet af det tilbage gennem utl_i18n.raw_to_char() .

Ikke helt sikker på, hvordan det vil klare multibyte-tegn, eller hvad du alligevel ønsker, der skal ske med dem...

Eller en variation fra diskussionen @RahulTripathi linkede til uden tegnsæthåndtering:

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                                                                     

Men den tråd bemærker også, at den kun virker for enkeltbyte-tegn.



  1. Hvilken DB til store databaser?

  2. Hvordan kan jeg beregne samlede berørte rækker, hvis der er flere DML-forespørgsler i min PLSQL-blok?

  3. MySQL-forbindelsen virker ikke

  4. Vælg sidste indsættelses-id